Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/elfmz/far2l.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorm32 <mak@trisoft.com.pl>2020-01-10 00:27:25 +0300
committerm32 <mak@trisoft.com.pl>2020-01-10 00:27:25 +0300
commit2c108af6674c81cb2cf1d821c8c9cbd4c071d6d4 (patch)
tree3b4cc562153ebf4ebbb256f76605e74d02f2f5c0 /python/configs/plug
parent2cae4a20b3da800b56415b873af5a66a4262d078 (diff)
python plugin
Diffstat (limited to 'python/configs/plug')
-rw-r--r--python/configs/plug/.gitignore1
-rw-r--r--python/configs/plug/far2l/__init__.py13
-rw-r--r--python/configs/plug/far2l/farcolor.hpp176
-rw-r--r--python/configs/plug/far2l/farkeys.hpp901
-rw-r--r--python/configs/plug/far2l/farwin.h293
-rw-r--r--python/configs/plug/far2l/logger.py23
-rw-r--r--python/configs/plug/far2l/plugin.hpp2062
-rw-r--r--python/configs/plug/far2l/plugin.py20
-rw-r--r--python/configs/plug/far2l/pluginmanager.py171
-rw-r--r--python/configs/plug/far2l/rpdb.py125
-rw-r--r--python/configs/plug/far2l/ucharmap.py104
-rw-r--r--python/configs/plug/far2l/udialog.py54
-rw-r--r--python/configs/plug/pythonEng.hlf7
13 files changed, 3950 insertions, 0 deletions
diff --git a/python/configs/plug/.gitignore b/python/configs/plug/.gitignore
new file mode 100644
index 00000000..e651e8e5
--- /dev/null
+++ b/python/configs/plug/.gitignore
@@ -0,0 +1 @@
+python/
diff --git a/python/configs/plug/far2l/__init__.py b/python/configs/plug/far2l/__init__.py
new file mode 100644
index 00000000..a77bbacd
--- /dev/null
+++ b/python/configs/plug/far2l/__init__.py
@@ -0,0 +1,13 @@
+import sys
+import io
+from . import logger
+
+
+try:
+ from .pluginmanager import PluginManager
+ pluginmanager = PluginManager()
+except:
+ fp = io.StringIO()
+ import traceback
+ traceback.print_exc(file=fp)
+ sys.stderr.write(fp.getvalue())
diff --git a/python/configs/plug/far2l/farcolor.hpp b/python/configs/plug/far2l/farcolor.hpp
new file mode 100644
index 00000000..065c84ab
--- /dev/null
+++ b/python/configs/plug/far2l/farcolor.hpp
@@ -0,0 +1,176 @@
+enum PaletteColors
+{
+ COL_MENUTEXT,
+ COL_MENUSELECTEDTEXT,
+ COL_MENUHIGHLIGHT,
+ COL_MENUSELECTEDHIGHLIGHT,
+ COL_MENUBOX,
+ COL_MENUTITLE,
+
+ COL_HMENUTEXT,
+ COL_HMENUSELECTEDTEXT,
+ COL_HMENUHIGHLIGHT,
+ COL_HMENUSELECTEDHIGHLIGHT,
+
+ COL_PANELTEXT,
+ COL_PANELSELECTEDTEXT,
+ COL_PANELHIGHLIGHTTEXT,
+ COL_PANELINFOTEXT,
+ COL_PANELCURSOR,
+ COL_PANELSELECTEDCURSOR,
+ COL_PANELTITLE,
+ COL_PANELSELECTEDTITLE,
+ COL_PANELCOLUMNTITLE,
+ COL_PANELTOTALINFO,
+ COL_PANELSELECTEDINFO,
+
+ COL_DIALOGTEXT,
+ COL_DIALOGHIGHLIGHTTEXT,
+ COL_DIALOGBOX,
+ COL_DIALOGBOXTITLE,
+ COL_DIALOGHIGHLIGHTBOXTITLE,
+ COL_DIALOGEDIT,
+ COL_DIALOGBUTTON,
+ COL_DIALOGSELECTEDBUTTON,
+ COL_DIALOGHIGHLIGHTBUTTON,
+ COL_DIALOGHIGHLIGHTSELECTEDBUTTON,
+
+ COL_DIALOGLISTTEXT,
+ COL_DIALOGLISTSELECTEDTEXT,
+ COL_DIALOGLISTHIGHLIGHT,
+ COL_DIALOGLISTSELECTEDHIGHLIGHT,
+
+ COL_WARNDIALOGTEXT,
+ COL_WARNDIALOGHIGHLIGHTTEXT,
+ COL_WARNDIALOGBOX,
+ COL_WARNDIALOGBOXTITLE,
+ COL_WARNDIALOGHIGHLIGHTBOXTITLE,
+ COL_WARNDIALOGEDIT,
+ COL_WARNDIALOGBUTTON,
+ COL_WARNDIALOGSELECTEDBUTTON,
+ COL_WARNDIALOGHIGHLIGHTBUTTON,
+ COL_WARNDIALOGHIGHLIGHTSELECTEDBUTTON,
+
+ COL_KEYBARNUM,
+ COL_KEYBARTEXT,
+ COL_KEYBARBACKGROUND,
+
+ COL_COMMANDLINE,
+
+ COL_CLOCK,
+
+ COL_VIEWERTEXT,
+ COL_VIEWERSELECTEDTEXT,
+ COL_VIEWERSTATUS,
+
+ COL_EDITORTEXT,
+ COL_EDITORSELECTEDTEXT,
+ COL_EDITORSTATUS,
+
+ COL_HELPTEXT,
+ COL_HELPHIGHLIGHTTEXT,
+ COL_HELPTOPIC,
+ COL_HELPSELECTEDTOPIC,
+ COL_HELPBOX,
+ COL_HELPBOXTITLE,
+
+ COL_PANELDRAGTEXT,
+ COL_DIALOGEDITUNCHANGED,
+ COL_PANELSCROLLBAR,
+ COL_HELPSCROLLBAR,
+ COL_PANELBOX,
+ COL_PANELSCREENSNUMBER,
+ COL_DIALOGEDITSELECTED,
+ COL_COMMANDLINESELECTED,
+ COL_VIEWERARROWS,
+
+ COL_RESERVED0,
+
+ COL_DIALOGLISTSCROLLBAR,
+ COL_MENUSCROLLBAR,
+ COL_VIEWERSCROLLBAR,
+ COL_COMMANDLINEPREFIX,
+ COL_DIALOGDISABLED,
+ COL_DIALOGEDITDISABLED,
+ COL_DIALOGLISTDISABLED,
+ COL_WARNDIALOGDISABLED,
+ COL_WARNDIALOGEDITDISABLED,
+ COL_WARNDIALOGLISTDISABLED,
+
+ COL_MENUDISABLEDTEXT,
+
+ COL_EDITORCLOCK,
+ COL_VIEWERCLOCK,
+
+ COL_DIALOGLISTTITLE,
+ COL_DIALOGLISTBOX,
+
+ COL_WARNDIALOGEDITSELECTED,
+ COL_WARNDIALOGEDITUNCHANGED,
+
+ COL_DIALOGCOMBOTEXT,
+ COL_DIALOGCOMBOSELECTEDTEXT,
+ COL_DIALOGCOMBOHIGHLIGHT,
+ COL_DIALOGCOMBOSELECTEDHIGHLIGHT,
+ COL_DIALOGCOMBOBOX,
+ COL_DIALOGCOMBOTITLE,
+ COL_DIALOGCOMBODISABLED,
+ COL_DIALOGCOMBOSCROLLBAR,
+
+ COL_WARNDIALOGLISTTEXT,
+ COL_WARNDIALOGLISTSELECTEDTEXT,
+ COL_WARNDIALOGLISTHIGHLIGHT,
+ COL_WARNDIALOGLISTSELECTEDHIGHLIGHT,
+ COL_WARNDIALOGLISTBOX,
+ COL_WARNDIALOGLISTTITLE,
+ COL_WARNDIALOGLISTSCROLLBAR,
+
+ COL_WARNDIALOGCOMBOTEXT,
+ COL_WARNDIALOGCOMBOSELECTEDTEXT,
+ COL_WARNDIALOGCOMBOHIGHLIGHT,
+ COL_WARNDIALOGCOMBOSELECTEDHIGHLIGHT,
+ COL_WARNDIALOGCOMBOBOX,
+ COL_WARNDIALOGCOMBOTITLE,
+ COL_WARNDIALOGCOMBODISABLED,
+ COL_WARNDIALOGCOMBOSCROLLBAR,
+
+ COL_DIALOGLISTARROWS,
+ COL_DIALOGLISTARROWSDISABLED,
+ COL_DIALOGLISTARROWSSELECTED,
+ COL_DIALOGCOMBOARROWS,
+ COL_DIALOGCOMBOARROWSDISABLED,
+ COL_DIALOGCOMBOARROWSSELECTED,
+ COL_WARNDIALOGLISTARROWS,
+ COL_WARNDIALOGLISTARROWSDISABLED,
+ COL_WARNDIALOGLISTARROWSSELECTED,
+ COL_WARNDIALOGCOMBOARROWS,
+ COL_WARNDIALOGCOMBOARROWSDISABLED,
+ COL_WARNDIALOGCOMBOARROWSSELECTED,
+ COL_MENUARROWS,
+ COL_MENUARROWSDISABLED,
+ COL_MENUARROWSSELECTED,
+ COL_COMMANDLINEUSERSCREEN,
+ COL_EDITORSCROLLBAR,
+
+ COL_MENUGRAYTEXT,
+ COL_MENUSELECTEDGRAYTEXT,
+ COL_DIALOGCOMBOGRAY,
+ COL_DIALOGCOMBOSELECTEDGRAYTEXT,
+ COL_DIALOGLISTGRAY,
+ COL_DIALOGLISTSELECTEDGRAYTEXT,
+ COL_WARNDIALOGCOMBOGRAY,
+ COL_WARNDIALOGCOMBOSELECTEDGRAYTEXT,
+ COL_WARNDIALOGLISTGRAY,
+ COL_WARNDIALOGLISTSELECTEDGRAYTEXT,
+
+ COL_DIALOGDEFAULTBUTTON,
+ COL_DIALOGSELECTEDDEFAULTBUTTON,
+ COL_DIALOGHIGHLIGHTDEFAULTBUTTON,
+ COL_DIALOGHIGHLIGHTSELECTEDDEFAULTBUTTON,
+ COL_WARNDIALOGDEFAULTBUTTON,
+ COL_WARNDIALOGSELECTEDDEFAULTBUTTON,
+ COL_WARNDIALOGHIGHLIGHTDEFAULTBUTTON,
+ COL_WARNDIALOGHIGHLIGHTSELECTEDDEFAULTBUTTON,
+
+ COL_LASTPALETTECOLOR
+};
diff --git a/python/configs/plug/far2l/farkeys.hpp b/python/configs/plug/far2l/farkeys.hpp
new file mode 100644
index 00000000..0259f831
--- /dev/null
+++ b/python/configs/plug/far2l/farkeys.hpp
@@ -0,0 +1,901 @@
+/*
+ * Virtual Keys, Standard Set
+ */
+#define VK_LBUTTON 0x01
+#define VK_RBUTTON 0x02
+#define VK_CANCEL 0x03
+#define VK_MBUTTON 0x04 /* NOT contiguous with L & RBUTTON */
+
+#define VK_XBUTTON1 0x05 /* NOT contiguous with L & RBUTTON */
+#define VK_XBUTTON2 0x06 /* NOT contiguous with L & RBUTTON */
+
+/*
+ * 0x07 : unassigned
+ */
+
+#define VK_BACK 0x08
+#define VK_TAB 0x09
+
+/*
+ * 0x0A - 0x0B : reserved
+ */
+
+#define VK_CLEAR 0x0C
+#define VK_RETURN 0x0D
+
+#define VK_SHIFT 0x10
+#define VK_CONTROL 0x11
+#define VK_MENU 0x12
+#define VK_PAUSE 0x13
+#define VK_CAPITAL 0x14
+
+#define VK_KANA 0x15
+#define VK_HANGEUL 0x15 /* old name - should be here for compatibility */
+#define VK_HANGUL 0x15
+#define VK_JUNJA 0x17
+#define VK_FINAL 0x18
+#define VK_HANJA 0x19
+#define VK_KANJI 0x19
+
+#define VK_ESCAPE 0x1B
+
+#define VK_CONVERT 0x1C
+#define VK_NONCONVERT 0x1D
+#define VK_ACCEPT 0x1E
+#define VK_MODECHANGE 0x1F
+
+#define VK_SPACE 0x20
+#define VK_PRIOR 0x21
+#define VK_NEXT 0x22
+#define VK_END 0x23
+#define VK_HOME 0x24
+#define VK_LEFT 0x25
+#define VK_UP 0x26
+#define VK_RIGHT 0x27
+#define VK_DOWN 0x28
+#define VK_SELECT 0x29
+#define VK_PRINT 0x2A
+#define VK_EXECUTE 0x2B
+#define VK_SNAPSHOT 0x2C
+#define VK_INSERT 0x2D
+#define VK_DELETE 0x2E
+#define VK_HELP 0x2F
+
+/*
+ * VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
+ * 0x40 : unassigned
+ * VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
+ */
+
+#define VK_LWIN 0x5B
+#define VK_RWIN 0x5C
+#define VK_APPS 0x5D
+
+/*
+ * 0x5E : reserved
+ */
+
+#define VK_SLEEP 0x5F
+
+#define VK_NUMPAD0 0x60
+#define VK_NUMPAD1 0x61
+#define VK_NUMPAD2 0x62
+#define VK_NUMPAD3 0x63
+#define VK_NUMPAD4 0x64
+#define VK_NUMPAD5 0x65
+#define VK_NUMPAD6 0x66
+#define VK_NUMPAD7 0x67
+#define VK_NUMPAD8 0x68
+#define VK_NUMPAD9 0x69
+#define VK_MULTIPLY 0x6A
+#define VK_ADD 0x6B
+#define VK_SEPARATOR 0x6C
+#define VK_SUBTRACT 0x6D
+#define VK_DECIMAL 0x6E
+#define VK_DIVIDE 0x6F
+#define VK_F1 0x70
+#define VK_F2 0x71
+#define VK_F3 0x72
+#define VK_F4 0x73
+#define VK_F5 0x74
+#define VK_F6 0x75
+#define VK_F7 0x76
+#define VK_F8 0x77
+#define VK_F9 0x78
+#define VK_F10 0x79
+#define VK_F11 0x7A
+#define VK_F12 0x7B
+#define VK_F13 0x7C
+#define VK_F14 0x7D
+#define VK_F15 0x7E
+#define VK_F16 0x7F
+#define VK_F17 0x80
+#define VK_F18 0x81
+#define VK_F19 0x82
+#define VK_F20 0x83
+#define VK_F21 0x84
+#define VK_F22 0x85
+#define VK_F23 0x86
+#define VK_F24 0x87
+
+/*
+ * 0x88 - 0x8F : unassigned
+ */
+
+#define VK_NUMLOCK 0x90
+#define VK_SCROLL 0x91
+
+/*
+ * NEC PC-9800 kbd definitions
+ */
+#define VK_OEM_NEC_EQUAL 0x92 // '=' key on numpad
+
+/*
+ * Fujitsu/OASYS kbd definitions
+ */
+#define VK_OEM_FJ_JISHO 0x92 // 'Dictionary' key
+#define VK_OEM_FJ_MASSHOU 0x93 // 'Unregister word' key
+#define VK_OEM_FJ_TOUROKU 0x94 // 'Register word' key
+#define VK_OEM_FJ_LOYA 0x95 // 'Left OYAYUBI' key
+#define VK_OEM_FJ_ROYA 0x96 // 'Right OYAYUBI' key
+
+/*
+ * 0x97 - 0x9F : unassigned
+ */
+
+/*
+ * VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys.
+ * Used only as parameters to GetAsyncKeyState() and GetKeyState().
+ * No other API or message will distinguish left and right keys in this way.
+ */
+#define VK_LSHIFT 0xA0
+#define VK_RSHIFT 0xA1
+#define VK_LCONTROL 0xA2
+#define VK_RCONTROL 0xA3
+#define VK_LMENU 0xA4
+#define VK_RMENU 0xA5
+
+#define VK_BROWSER_BACK 0xA6
+#define VK_BROWSER_FORWARD 0xA7
+#define VK_BROWSER_REFRESH 0xA8
+#define VK_BROWSER_STOP 0xA9
+#define VK_BROWSER_SEARCH 0xAA
+#define VK_BROWSER_FAVORITES 0xAB
+#define VK_BROWSER_HOME 0xAC
+
+#define VK_VOLUME_MUTE 0xAD
+#define VK_VOLUME_DOWN 0xAE
+#define VK_VOLUME_UP 0xAF
+#define VK_MEDIA_NEXT_TRACK 0xB0
+#define VK_MEDIA_PREV_TRACK 0xB1
+#define VK_MEDIA_STOP 0xB2
+#define VK_MEDIA_PLAY_PAUSE 0xB3
+#define VK_LAUNCH_MAIL 0xB4
+#define VK_LAUNCH_MEDIA_SELECT 0xB5
+#define VK_LAUNCH_APP1 0xB6
+#define VK_LAUNCH_APP2 0xB7
+
+/*
+ * 0xB8 - 0xB9 : reserved
+ */
+
+#define VK_OEM_1 0xBA // ';:' for US
+#define VK_OEM_PLUS 0xBB // '+' any country
+#define VK_OEM_COMMA 0xBC // ',' any country
+#define VK_OEM_MINUS 0xBD // '-' any country
+#define VK_OEM_PERIOD 0xBE // '.' any country
+#define VK_OEM_2 0xBF // '/?' for US
+#define VK_OEM_3 0xC0 // '`~' for US
+
+/*
+ * 0xC1 - 0xD7 : reserved
+ */
+
+/*
+ * 0xD8 - 0xDA : unassigned
+ */
+
+#define VK_OEM_4 0xDB // '[{' for US
+#define VK_OEM_5 0xDC // '\|' for US
+#define VK_OEM_6 0xDD // ']}' for US
+#define VK_OEM_7 0xDE // ''"' for US
+#define VK_OEM_8 0xDF
+
+/*
+ * 0xE0 : reserved
+ */
+
+/*
+ * Various extended or enhanced keyboards
+ */
+#define VK_OEM_AX 0xE1 // 'AX' key on Japanese AX kbd
+#define VK_OEM_102 0xE2 // "<>" or "\|" on RT 102-key kbd.
+#define VK_ICO_HELP 0xE3 // Help key on ICO
+#define VK_ICO_00 0xE4 // 00 key on ICO
+
+#define VK_PROCESSKEY 0xE5
+
+#define VK_ICO_CLEAR 0xE6
+
+
+#define VK_PACKET 0xE7
+
+
+
+/*
+ * 0xE8 : unassigned
+ */
+
+/*
+ * Nokia/Ericsson definitions
+ */
+#define VK_OEM_RESET 0xE9
+#define VK_OEM_JUMP 0xEA
+#define VK_OEM_PA1 0xEB
+#define VK_OEM_PA2 0xEC
+#define VK_OEM_PA3 0xED
+#define VK_OEM_WSCTRL 0xEE
+#define VK_OEM_CUSEL 0xEF
+#define VK_OEM_ATTN 0xF0
+#define VK_OEM_FINISH 0xF1
+#define VK_OEM_COPY 0xF2
+#define VK_OEM_AUTO 0xF3
+#define VK_OEM_ENLW 0xF4
+#define VK_OEM_BACKTAB 0xF5
+
+#define VK_ATTN 0xF6
+#define VK_CRSEL 0xF7
+#define VK_EXSEL 0xF8
+#define VK_EREOF 0xF9
+#define VK_PLAY 0xFA
+#define VK_ZOOM 0xFB
+#define VK_NONAME 0xFC
+#define VK_PA1 0xFD
+#define VK_OEM_CLEAR 0xFE
+
+#define KEYEVENTF_EXTENDEDKEY 0x0001
+#define KEYEVENTF_KEYUP 0x0002
+#define KEYEVENTF_UNICODE 0x0004
+#define KEYEVENTF_SCANCODE 0x0008
+
+#define EXTENDED_KEY_BASE 0x00010000
+#define INTERNAL_KEY_BASE 0x00020000
+#define INTERNAL_KEY_BASE_2 0x00030000
+
+enum BaseDefKeyboard
+{
+ KEY_CTRLMASK =0xFFF00000,
+ KEY_CTRL =0x01000000,
+ KEY_ALT =0x02000000,
+ KEY_SHIFT =0x04000000,
+ //
+ KEY_RCTRL =0x10000000,
+ KEY_RALT =0x20000000,
+
+ KEY_BRACKET =91,
+ KEY_BACKBRACKET =93,
+ KEY_COMMA =44,
+ KEY_QUOTE =34,
+ KEY_DOT =46,
+ KEY_SLASH =47,
+ KEY_COLON =58,
+ KEY_SEMICOLON =59,
+ KEY_BACKSLASH =92,
+
+ KEY_BS =0x00000008,
+ KEY_TAB =0x00000009,
+ KEY_ENTER =0x0000000D,
+ KEY_ESC =0x0000001B,
+ KEY_SPACE =0x00000020,
+
+ KEY_MASKF =0x0001FFFF,
+
+ KEY_FKEY_BEGIN =EXTENDED_KEY_BASE,
+
+ KEY_BREAK =EXTENDED_KEY_BASE+VK_CANCEL,
+
+ KEY_PAUSE =EXTENDED_KEY_BASE+VK_PAUSE,
+ KEY_CAPSLOCK =EXTENDED_KEY_BASE+VK_CAPITAL,
+
+ KEY_PGUP =EXTENDED_KEY_BASE+VK_PRIOR,
+ KEY_PGDN =EXTENDED_KEY_BASE+VK_NEXT,
+ KEY_END =EXTENDED_KEY_BASE+VK_END,
+ KEY_HOME =EXTENDED_KEY_BASE+VK_HOME,
+ KEY_LEFT =EXTENDED_KEY_BASE+VK_LEFT,
+ KEY_UP =EXTENDED_KEY_BASE+VK_UP,
+ KEY_RIGHT =EXTENDED_KEY_BASE+VK_RIGHT,
+ KEY_DOWN =EXTENDED_KEY_BASE+VK_DOWN,
+ KEY_PRNTSCRN =EXTENDED_KEY_BASE+VK_SNAPSHOT,
+ KEY_INS =EXTENDED_KEY_BASE+VK_INSERT,
+ KEY_DEL =EXTENDED_KEY_BASE+VK_DELETE,
+
+ KEY_LWIN =EXTENDED_KEY_BASE+VK_LWIN,
+ KEY_RWIN =EXTENDED_KEY_BASE+VK_RWIN,
+ KEY_APPS =EXTENDED_KEY_BASE+VK_APPS,
+ KEY_STANDBY =EXTENDED_KEY_BASE+VK_SLEEP,
+
+ KEY_NUMPAD0 =EXTENDED_KEY_BASE+VK_NUMPAD0,
+ KEY_NUMPAD1 =EXTENDED_KEY_BASE+VK_NUMPAD1,
+ KEY_NUMPAD2 =EXTENDED_KEY_BASE+VK_NUMPAD2,
+ KEY_NUMPAD3 =EXTENDED_KEY_BASE+VK_NUMPAD3,
+ KEY_NUMPAD4 =EXTENDED_KEY_BASE+VK_NUMPAD4,
+ KEY_NUMPAD5 =EXTENDED_KEY_BASE+VK_NUMPAD5,
+ KEY_CLEAR =KEY_NUMPAD5,
+ KEY_NUMPAD6 =EXTENDED_KEY_BASE+VK_NUMPAD6,
+ KEY_NUMPAD7 =EXTENDED_KEY_BASE+VK_NUMPAD7,
+ KEY_NUMPAD8 =EXTENDED_KEY_BASE+VK_NUMPAD8,
+ KEY_NUMPAD9 =EXTENDED_KEY_BASE+VK_NUMPAD9,
+
+ KEY_MULTIPLY =EXTENDED_KEY_BASE+VK_MULTIPLY,
+ KEY_ADD =EXTENDED_KEY_BASE+VK_ADD,
+ KEY_SUBTRACT =EXTENDED_KEY_BASE+VK_SUBTRACT,
+ KEY_DECIMAL =EXTENDED_KEY_BASE+VK_DECIMAL,
+ KEY_DIVIDE =EXTENDED_KEY_BASE+VK_DIVIDE,
+
+ KEY_F1 =EXTENDED_KEY_BASE+VK_F1,
+ KEY_F2 =EXTENDED_KEY_BASE+VK_F2,
+ KEY_F3 =EXTENDED_KEY_BASE+VK_F3,
+ KEY_F4 =EXTENDED_KEY_BASE+VK_F4,
+ KEY_F5 =EXTENDED_KEY_BASE+VK_F5,
+ KEY_F6 =EXTENDED_KEY_BASE+VK_F6,
+ KEY_F7 =EXTENDED_KEY_BASE+VK_F7,
+ KEY_F8 =EXTENDED_KEY_BASE+VK_F8,
+ KEY_F9 =EXTENDED_KEY_BASE+VK_F9,
+ KEY_F10 =EXTENDED_KEY_BASE+VK_F10,
+ KEY_F11 =EXTENDED_KEY_BASE+VK_F11,
+ KEY_F12 =EXTENDED_KEY_BASE+VK_F12,
+
+ KEY_F13 =EXTENDED_KEY_BASE+VK_F13,
+ KEY_F14 =EXTENDED_KEY_BASE+VK_F14,
+ KEY_F15 =EXTENDED_KEY_BASE+VK_F15,
+ KEY_F16 =EXTENDED_KEY_BASE+VK_F16,
+ KEY_F17 =EXTENDED_KEY_BASE+VK_F17,
+ KEY_F18 =EXTENDED_KEY_BASE+VK_F18,
+ KEY_F19 =EXTENDED_KEY_BASE+VK_F19,
+ KEY_F20 =EXTENDED_KEY_BASE+VK_F20,
+ KEY_F21 =EXTENDED_KEY_BASE+VK_F21,
+ KEY_F22 =EXTENDED_KEY_BASE+VK_F22,
+ KEY_F23 =EXTENDED_KEY_BASE+VK_F23,
+ KEY_F24 =EXTENDED_KEY_BASE+VK_F24,
+
+ KEY_NUMLOCK =EXTENDED_KEY_BASE+VK_NUMLOCK,
+ KEY_SCROLLLOCK =EXTENDED_KEY_BASE+VK_SCROLL,
+
+ KEY_CTRLALTSHIFTPRESS =INTERNAL_KEY_BASE+1,
+ KEY_CTRLALTSHIFTRELEASE =INTERNAL_KEY_BASE+2,
+
+ KEY_MSWHEEL_UP =INTERNAL_KEY_BASE+3,
+ KEY_MSWHEEL_DOWN =INTERNAL_KEY_BASE+4,
+ KEY_NUMDEL =INTERNAL_KEY_BASE+9,
+ KEY_NUMENTER =INTERNAL_KEY_BASE+0xB,
+
+ KEY_MSWHEEL_LEFT =INTERNAL_KEY_BASE+0xC,
+ KEY_MSWHEEL_RIGHT =INTERNAL_KEY_BASE+0xD,
+
+ KEY_MSLCLICK =INTERNAL_KEY_BASE+0xF,
+ KEY_MSRCLICK =INTERNAL_KEY_BASE+0x10,
+
+ KEY_MSM1CLICK =INTERNAL_KEY_BASE+0x11,
+ KEY_MSM2CLICK =INTERNAL_KEY_BASE+0x12,
+ KEY_MSM3CLICK =INTERNAL_KEY_BASE+0x13,
+
+
+
+ KEY_VK_0xFF_BEGIN =EXTENDED_KEY_BASE+0x00000100,
+ KEY_VK_0xFF_END =EXTENDED_KEY_BASE+0x000001FF,
+
+ KEY_END_FKEY =0x0001FFFF,
+
+ KEY_NONE =INTERNAL_KEY_BASE_2+1,
+ KEY_IDLE =INTERNAL_KEY_BASE_2+2,
+
+ KEY_KILLFOCUS =INTERNAL_KEY_BASE_2+6,
+ KEY_GOTFOCUS =INTERNAL_KEY_BASE_2+7,
+ KEY_CONSOLE_BUFFER_RESIZE=INTERNAL_KEY_BASE_2+8,
+
+
+ KEY_END_SKEY =0x0003FFFF,
+ KEY_LAST_BASE =KEY_END_SKEY,
+
+};
+
+enum AddDefKeyboard
+{
+ KEY_CTRLSHIFT =KEY_CTRL|KEY_SHIFT,
+ KEY_ALTSHIFT =KEY_ALT|KEY_SHIFT,
+ KEY_CTRLALT =KEY_CTRL|KEY_ALT,
+
+ KEY_CTRL0 =KEY_CTRL+'0',
+ KEY_CTRL1 =KEY_CTRL+'1',
+ KEY_CTRL2 =KEY_CTRL+'2',
+ KEY_CTRL3 =KEY_CTRL+'3',
+ KEY_CTRL4 =KEY_CTRL+'4',
+ KEY_CTRL5 =KEY_CTRL+'5',
+ KEY_CTRL6 =KEY_CTRL+'6',
+ KEY_CTRL7 =KEY_CTRL+'7',
+ KEY_CTRL8 =KEY_CTRL+'8',
+ KEY_CTRL9 =KEY_CTRL+'9',
+
+ KEY_RCTRL0 =KEY_RCTRL+'0',
+ KEY_RCTRL1 =KEY_RCTRL+'1',
+ KEY_RCTRL2 =KEY_RCTRL+'2',
+ KEY_RCTRL3 =KEY_RCTRL+'3',
+ KEY_RCTRL4 =KEY_RCTRL+'4',
+ KEY_RCTRL5 =KEY_RCTRL+'5',
+ KEY_RCTRL6 =KEY_RCTRL+'6',
+ KEY_RCTRL7 =KEY_RCTRL+'7',
+ KEY_RCTRL8 =KEY_RCTRL+'8',
+ KEY_RCTRL9 =KEY_RCTRL+'9',
+
+ KEY_CTRLA =KEY_CTRL+'A',
+ KEY_CTRLB =KEY_CTRL+'B',
+ KEY_CTRLC =KEY_CTRL+'C',
+ KEY_CTRLD =KEY_CTRL+'D',
+ KEY_CTRLE =KEY_CTRL+'E',
+ KEY_CTRLF =KEY_CTRL+'F',
+ KEY_CTRLG =KEY_CTRL+'G',
+ KEY_CTRLH =KEY_CTRL+'H',
+ KEY_CTRLI =KEY_CTRL+'I',
+ KEY_CTRLJ =KEY_CTRL+'J',
+ KEY_CTRLK =KEY_CTRL+'K',
+ KEY_CTRLL =KEY_CTRL+'L',
+ KEY_CTRLM =KEY_CTRL+'M',
+ KEY_CTRLN =KEY_CTRL+'N',
+ KEY_CTRLO =KEY_CTRL+'O',
+ KEY_CTRLP =KEY_CTRL+'P',
+ KEY_CTRLQ =KEY_CTRL+'Q',
+ KEY_CTRLR =KEY_CTRL+'R',
+ KEY_CTRLS =KEY_CTRL+'S',
+ KEY_CTRLT =KEY_CTRL+'T',
+ KEY_CTRLU =KEY_CTRL+'U',
+ KEY_CTRLV =KEY_CTRL+'V',
+ KEY_CTRLW =KEY_CTRL+'W',
+ KEY_CTRLX =KEY_CTRL+'X',
+ KEY_CTRLY =KEY_CTRL+'Y',
+ KEY_CTRLZ =KEY_CTRL+'Z',
+
+ KEY_CTRLBRACKET =KEY_CTRL|KEY_BRACKET,
+ KEY_CTRLBACKBRACKET =KEY_CTRL|KEY_BACKBRACKET,
+ KEY_CTRLCOMMA =KEY_CTRL|KEY_COMMA,
+ KEY_CTRLQUOTE =KEY_CTRL|KEY_QUOTE,
+ KEY_CTRLDOT =KEY_CTRL|KEY_DOT,
+
+ KEY_ALT0 =KEY_ALT+'0',
+ KEY_ALT1 =KEY_ALT+'1',
+ KEY_ALT2 =KEY_ALT+'2',
+ KEY_ALT3 =KEY_ALT+'3',
+ KEY_ALT4 =KEY_ALT+'4',
+ KEY_ALT5 =KEY_ALT+'5',
+ KEY_ALT6 =KEY_ALT+'6',
+ KEY_ALT7 =KEY_ALT+'7',
+ KEY_ALT8 =KEY_ALT+'8',
+ KEY_ALT9 =KEY_ALT+'9',
+
+ KEY_ALTADD =KEY_ALT|KEY_ADD,
+ KEY_ALTDOT =KEY_ALT|KEY_DOT,
+ KEY_ALTCOMMA =KEY_ALT|KEY_COMMA,
+ KEY_ALTMULTIPLY =KEY_ALT|KEY_MULTIPLY,
+
+ KEY_ALTA =KEY_ALT+'A',
+ KEY_ALTB =KEY_ALT+'B',
+ KEY_ALTC =KEY_ALT+'C',
+ KEY_ALTD =KEY_ALT+'D',
+ KEY_ALTE =KEY_ALT+'E',
+ KEY_ALTF =KEY_ALT+'F',
+ KEY_ALTG =KEY_ALT+'G',
+ KEY_ALTH =KEY_ALT+'H',
+ KEY_ALTI =KEY_ALT+'I',
+ KEY_ALTJ =KEY_ALT+'J',
+ KEY_ALTK =KEY_ALT+'K',
+ KEY_ALTL =KEY_ALT+'L',
+ KEY_ALTM =KEY_ALT+'M',
+ KEY_ALTN =KEY_ALT+'N',
+ KEY_ALTO =KEY_ALT+'O',
+ KEY_ALTP =KEY_ALT+'P',
+ KEY_ALTQ =KEY_ALT+'Q',
+ KEY_ALTR =KEY_ALT+'R',
+ KEY_ALTS =KEY_ALT+'S',
+ KEY_ALTT =KEY_ALT+'T',
+ KEY_ALTU =KEY_ALT+'U',
+ KEY_ALTV =KEY_ALT+'V',
+ KEY_ALTW =KEY_ALT+'W',
+ KEY_ALTX =KEY_ALT+'X',
+ KEY_ALTY =KEY_ALT+'Y',
+ KEY_ALTZ =KEY_ALT+'Z',
+
+ KEY_CTRLSHIFTADD =KEY_CTRL|KEY_SHIFT|KEY_ADD,
+ KEY_CTRLSHIFTSUBTRACT =KEY_CTRL|KEY_SHIFT|KEY_SUBTRACT,
+ KEY_CTRLSHIFTDOT =KEY_CTRL|KEY_SHIFT|KEY_DOT,
+ KEY_CTRLSHIFTSLASH =KEY_CTRL|KEY_SHIFT|KEY_SLASH,
+
+ KEY_CTRLSHIFT0 =(KEY_CTRL|KEY_SHIFT)+'0',
+ KEY_CTRLSHIFT1 =(KEY_CTRL|KEY_SHIFT)+'1',
+ KEY_CTRLSHIFT2 =(KEY_CTRL|KEY_SHIFT)+'2',
+ KEY_CTRLSHIFT3 =(KEY_CTRL|KEY_SHIFT)+'3',
+ KEY_CTRLSHIFT4 =(KEY_CTRL|KEY_SHIFT)+'4',
+ KEY_CTRLSHIFT5 =(KEY_CTRL|KEY_SHIFT)+'5',
+ KEY_CTRLSHIFT6 =(KEY_CTRL|KEY_SHIFT)+'6',
+ KEY_CTRLSHIFT7 =(KEY_CTRL|KEY_SHIFT)+'7',
+ KEY_CTRLSHIFT8 =(KEY_CTRL|KEY_SHIFT)+'8',
+ KEY_CTRLSHIFT9 =(KEY_CTRL|KEY_SHIFT)+'9',
+
+ KEY_RCTRLSHIFT0 =KEY_RCTRL+KEY_SHIFT+'0',
+ KEY_RCTRLSHIFT1 =KEY_RCTRL+KEY_SHIFT+'1',
+ KEY_RCTRLSHIFT2 =KEY_RCTRL+KEY_SHIFT+'2',
+ KEY_RCTRLSHIFT3 =KEY_RCTRL+KEY_SHIFT+'3',
+ KEY_RCTRLSHIFT4 =KEY_RCTRL+KEY_SHIFT+'4',
+ KEY_RCTRLSHIFT5 =KEY_RCTRL+KEY_SHIFT+'5',
+ KEY_RCTRLSHIFT6 =KEY_RCTRL+KEY_SHIFT+'6',
+ KEY_RCTRLSHIFT7 =KEY_RCTRL+KEY_SHIFT+'7',
+ KEY_RCTRLSHIFT8 =KEY_RCTRL+KEY_SHIFT+'8',
+ KEY_RCTRLSHIFT9 =KEY_RCTRL+KEY_SHIFT+'9',
+
+ KEY_CTRLSHIFTA =(KEY_CTRL|KEY_SHIFT)+'A',
+ KEY_CTRLSHIFTB =(KEY_CTRL|KEY_SHIFT)+'B',
+ KEY_CTRLSHIFTC =(KEY_CTRL|KEY_SHIFT)+'C',
+ KEY_CTRLSHIFTD =(KEY_CTRL|KEY_SHIFT)+'D',
+ KEY_CTRLSHIFTE =(KEY_CTRL|KEY_SHIFT)+'E',
+ KEY_CTRLSHIFTF =(KEY_CTRL|KEY_SHIFT)+'F',
+ KEY_CTRLSHIFTG =(KEY_CTRL|KEY_SHIFT)+'G',
+ KEY_CTRLSHIFTH =(KEY_CTRL|KEY_SHIFT)+'H',
+ KEY_CTRLSHIFTI =(KEY_CTRL|KEY_SHIFT)+'I',
+ KEY_CTRLSHIFTJ =(KEY_CTRL|KEY_SHIFT)+'J',
+ KEY_CTRLSHIFTK =(KEY_CTRL|KEY_SHIFT)+'K',
+ KEY_CTRLSHIFTL =(KEY_CTRL|KEY_SHIFT)+'L',
+ KEY_CTRLSHIFTM =(KEY_CTRL|KEY_SHIFT)+'M',
+ KEY_CTRLSHIFTN =(KEY_CTRL|KEY_SHIFT)+'N',
+ KEY_CTRLSHIFTO =(KEY_CTRL|KEY_SHIFT)+'O',
+ KEY_CTRLSHIFTP =(KEY_CTRL|KEY_SHIFT)+'P',
+ KEY_CTRLSHIFTQ =(KEY_CTRL|KEY_SHIFT)+'Q',
+ KEY_CTRLSHIFTR =(KEY_CTRL|KEY_SHIFT)+'R',
+ KEY_CTRLSHIFTS =(KEY_CTRL|KEY_SHIFT)+'S',
+ KEY_CTRLSHIFTT =(KEY_CTRL|KEY_SHIFT)+'T',
+ KEY_CTRLSHIFTU =(KEY_CTRL|KEY_SHIFT)+'U',
+ KEY_CTRLSHIFTV =(KEY_CTRL|KEY_SHIFT)+'V',
+ KEY_CTRLSHIFTW =(KEY_CTRL|KEY_SHIFT)+'W',
+ KEY_CTRLSHIFTX =(KEY_CTRL|KEY_SHIFT)+'X',
+ KEY_CTRLSHIFTY =(KEY_CTRL|KEY_SHIFT)+'Y',
+ KEY_CTRLSHIFTZ =(KEY_CTRL|KEY_SHIFT)+'Z',
+
+ KEY_CTRLSHIFTBRACKET =KEY_CTRL|KEY_SHIFT|KEY_BRACKET,
+ KEY_CTRLSHIFTBACKSLASH =KEY_CTRL|KEY_SHIFT|KEY_BACKSLASH,
+ KEY_CTRLSHIFTBACKBRACKET =KEY_CTRL|KEY_SHIFT|KEY_BACKBRACKET,
+
+ KEY_ALTSHIFT0 =(KEY_ALT|KEY_SHIFT)+'0',
+ KEY_ALTSHIFT1 =(KEY_ALT|KEY_SHIFT)+'1',
+ KEY_ALTSHIFT2 =(KEY_ALT|KEY_SHIFT)+'2',
+ KEY_ALTSHIFT3 =(KEY_ALT|KEY_SHIFT)+'3',
+ KEY_ALTSHIFT4 =(KEY_ALT|KEY_SHIFT)+'4',
+ KEY_ALTSHIFT5 =(KEY_ALT|KEY_SHIFT)+'5',
+ KEY_ALTSHIFT6 =(KEY_ALT|KEY_SHIFT)+'6',
+ KEY_ALTSHIFT7 =(KEY_ALT|KEY_SHIFT)+'7',
+ KEY_ALTSHIFT8 =(KEY_ALT|KEY_SHIFT)+'8',
+ KEY_ALTSHIFT9 =(KEY_ALT|KEY_SHIFT)+'9',
+
+ KEY_ALTSHIFTA =(KEY_ALT|KEY_SHIFT)+'A',
+ KEY_ALTSHIFTB =(KEY_ALT|KEY_SHIFT)+'B',
+ KEY_ALTSHIFTC =(KEY_ALT|KEY_SHIFT)+'C',
+ KEY_ALTSHIFTD =(KEY_ALT|KEY_SHIFT)+'D',
+ KEY_ALTSHIFTE =(KEY_ALT|KEY_SHIFT)+'E',
+ KEY_ALTSHIFTF =(KEY_ALT|KEY_SHIFT)+'F',
+ KEY_ALTSHIFTG =(KEY_ALT|KEY_SHIFT)+'G',
+ KEY_ALTSHIFTH =(KEY_ALT|KEY_SHIFT)+'H',
+ KEY_ALTSHIFTI =(KEY_ALT|KEY_SHIFT)+'I',
+ KEY_ALTSHIFTJ =(KEY_ALT|KEY_SHIFT)+'J',
+ KEY_ALTSHIFTK =(KEY_ALT|KEY_SHIFT)+'K',
+ KEY_ALTSHIFTL =(KEY_ALT|KEY_SHIFT)+'L',
+ KEY_ALTSHIFTM =(KEY_ALT|KEY_SHIFT)+'M',
+ KEY_ALTSHIFTN =(KEY_ALT|KEY_SHIFT)+'N',
+ KEY_ALTSHIFTO =(KEY_ALT|KEY_SHIFT)+'O',
+ KEY_ALTSHIFTP =(KEY_ALT|KEY_SHIFT)+'P',
+ KEY_ALTSHIFTQ =(KEY_ALT|KEY_SHIFT)+'Q',
+ KEY_ALTSHIFTR =(KEY_ALT|KEY_SHIFT)+'R',
+ KEY_ALTSHIFTS =(KEY_ALT|KEY_SHIFT)+'S',
+ KEY_ALTSHIFTT =(KEY_ALT|KEY_SHIFT)+'T',
+ KEY_ALTSHIFTU =(KEY_ALT|KEY_SHIFT)+'U',
+ KEY_ALTSHIFTV =(KEY_ALT|KEY_SHIFT)+'V',
+ KEY_ALTSHIFTW =(KEY_ALT|KEY_SHIFT)+'W',
+ KEY_ALTSHIFTX =(KEY_ALT|KEY_SHIFT)+'X',
+ KEY_ALTSHIFTY =(KEY_ALT|KEY_SHIFT)+'Y',
+ KEY_ALTSHIFTZ =(KEY_ALT|KEY_SHIFT)+'Z',
+
+ KEY_ALTSHIFTBRACKET =KEY_ALT|KEY_SHIFT|KEY_BRACKET,
+ KEY_ALTSHIFTBACKBRACKET =KEY_ALT|KEY_SHIFT|KEY_BACKBRACKET,
+
+ KEY_CTRLALT0 =(KEY_CTRL|KEY_ALT)+'0',
+ KEY_CTRLALT1 =(KEY_CTRL|KEY_ALT)+'1',
+ KEY_CTRLALT2 =(KEY_CTRL|KEY_ALT)+'2',
+ KEY_CTRLALT3 =(KEY_CTRL|KEY_ALT)+'3',
+ KEY_CTRLALT4 =(KEY_CTRL|KEY_ALT)+'4',
+ KEY_CTRLALT5 =(KEY_CTRL|KEY_ALT)+'5',
+ KEY_CTRLALT6 =(KEY_CTRL|KEY_ALT)+'6',
+ KEY_CTRLALT7 =(KEY_CTRL|KEY_ALT)+'7',
+ KEY_CTRLALT8 =(KEY_CTRL|KEY_ALT)+'8',
+ KEY_CTRLALT9 =(KEY_CTRL|KEY_ALT)+'9',
+
+ KEY_CTRLALTA =(KEY_CTRL|KEY_ALT)+'A',
+ KEY_CTRLALTB =(KEY_CTRL|KEY_ALT)+'B',
+ KEY_CTRLALTC =(KEY_CTRL|KEY_ALT)+'C',
+ KEY_CTRLALTD =(KEY_CTRL|KEY_ALT)+'D',
+ KEY_CTRLALTE =(KEY_CTRL|KEY_ALT)+'E',
+ KEY_CTRLALTF =(KEY_CTRL|KEY_ALT)+'F',
+ KEY_CTRLALTG =(KEY_CTRL|KEY_ALT)+'G',
+ KEY_CTRLALTH =(KEY_CTRL|KEY_ALT)+'H',
+ KEY_CTRLALTI =(KEY_CTRL|KEY_ALT)+'I',
+ KEY_CTRLALTJ =(KEY_CTRL|KEY_ALT)+'J',
+ KEY_CTRLALTK =(KEY_CTRL|KEY_ALT)+'K',
+ KEY_CTRLALTL =(KEY_CTRL|KEY_ALT)+'L',
+ KEY_CTRLALTM =(KEY_CTRL|KEY_ALT)+'M',
+ KEY_CTRLALTN =(KEY_CTRL|KEY_ALT)+'N',
+ KEY_CTRLALTO =(KEY_CTRL|KEY_ALT)+'O',
+ KEY_CTRLALTP =(KEY_CTRL|KEY_ALT)+'P',
+ KEY_CTRLALTQ =(KEY_CTRL|KEY_ALT)+'Q',
+ KEY_CTRLALTR =(KEY_CTRL|KEY_ALT)+'R',
+ KEY_CTRLALTS =(KEY_CTRL|KEY_ALT)+'S',
+ KEY_CTRLALTT =(KEY_CTRL|KEY_ALT)+'T',
+ KEY_CTRLALTU =(KEY_CTRL|KEY_ALT)+'U',
+ KEY_CTRLALTV =(KEY_CTRL|KEY_ALT)+'V',
+ KEY_CTRLALTW =(KEY_CTRL|KEY_ALT)+'W',
+ KEY_CTRLALTX =(KEY_CTRL|KEY_ALT)+'X',
+ KEY_CTRLALTY =(KEY_CTRL|KEY_ALT)+'Y',
+ KEY_CTRLALTZ =(KEY_CTRL|KEY_ALT)+'Z',
+
+ KEY_CTRLALTBRACKET =KEY_CTRL|KEY_ALT|KEY_BRACKET,
+ KEY_CTRLALTBACKBRACKET =KEY_CTRL|KEY_ALT|KEY_BACKBRACKET,
+
+ KEY_CTRLF1 =KEY_CTRL|KEY_F1,
+ KEY_CTRLF2 =KEY_CTRL|KEY_F2,
+ KEY_CTRLF3 =KEY_CTRL|KEY_F3,
+ KEY_CTRLF4 =KEY_CTRL|KEY_F4,
+ KEY_CTRLF5 =KEY_CTRL|KEY_F5,
+ KEY_CTRLF6 =KEY_CTRL|KEY_F6,
+ KEY_CTRLF7 =KEY_CTRL|KEY_F7,
+ KEY_CTRLF8 =KEY_CTRL|KEY_F8,
+ KEY_CTRLF9 =KEY_CTRL|KEY_F9,
+ KEY_CTRLF10 =KEY_CTRL|KEY_F10,
+ KEY_CTRLF11 =KEY_CTRL|KEY_F11,
+ KEY_CTRLF12 =KEY_CTRL|KEY_F12,
+
+ KEY_SHIFTF1 =KEY_SHIFT|KEY_F1,
+ KEY_SHIFTF2 =KEY_SHIFT|KEY_F2,
+ KEY_SHIFTF3 =KEY_SHIFT|KEY_F3,
+ KEY_SHIFTF4 =KEY_SHIFT|KEY_F4,
+ KEY_SHIFTF5 =KEY_SHIFT|KEY_F5,
+ KEY_SHIFTF6 =KEY_SHIFT|KEY_F6,
+ KEY_SHIFTF7 =KEY_SHIFT|KEY_F7,
+ KEY_SHIFTF8 =KEY_SHIFT|KEY_F8,
+ KEY_SHIFTF9 =KEY_SHIFT|KEY_F9,
+ KEY_SHIFTF10 =KEY_SHIFT|KEY_F10,
+ KEY_SHIFTF11 =KEY_SHIFT|KEY_F11,
+ KEY_SHIFTF12 =KEY_SHIFT|KEY_F12,
+
+ KEY_ALTF1 =KEY_ALT|KEY_F1,
+ KEY_ALTF2 =KEY_ALT|KEY_F2,
+ KEY_ALTF3 =KEY_ALT|KEY_F3,
+ KEY_ALTF4 =KEY_ALT|KEY_F4,
+ KEY_ALTF5 =KEY_ALT|KEY_F5,
+ KEY_ALTF6 =KEY_ALT|KEY_F6,
+ KEY_ALTF7 =KEY_ALT|KEY_F7,
+ KEY_ALTF8 =KEY_ALT|KEY_F8,
+ KEY_ALTF9 =KEY_ALT|KEY_F9,
+ KEY_ALTF10 =KEY_ALT|KEY_F10,
+ KEY_ALTF11 =KEY_ALT|KEY_F11,
+ KEY_ALTF12 =KEY_ALT|KEY_F12,
+
+ KEY_CTRLSHIFTF1 =KEY_CTRL|KEY_SHIFT|KEY_F1,
+ KEY_CTRLSHIFTF2 =KEY_CTRL|KEY_SHIFT|KEY_F2,
+ KEY_CTRLSHIFTF3 =KEY_CTRL|KEY_SHIFT|KEY_F3,
+ KEY_CTRLSHIFTF4 =KEY_CTRL|KEY_SHIFT|KEY_F4,
+ KEY_CTRLSHIFTF5 =KEY_CTRL|KEY_SHIFT|KEY_F5,
+ KEY_CTRLSHIFTF6 =KEY_CTRL|KEY_SHIFT|KEY_F6,
+ KEY_CTRLSHIFTF7 =KEY_CTRL|KEY_SHIFT|KEY_F7,
+ KEY_CTRLSHIFTF8 =KEY_CTRL|KEY_SHIFT|KEY_F8,
+ KEY_CTRLSHIFTF9 =KEY_CTRL|KEY_SHIFT|KEY_F9,
+ KEY_CTRLSHIFTF10 =KEY_CTRL|KEY_SHIFT|KEY_F10,
+ KEY_CTRLSHIFTF11 =KEY_CTRL|KEY_SHIFT|KEY_F11,
+ KEY_CTRLSHIFTF12 =KEY_CTRL|KEY_SHIFT|KEY_F12,
+
+ KEY_ALTSHIFTF1 =KEY_ALT|KEY_SHIFT|KEY_F1,
+ KEY_ALTSHIFTF2 =KEY_ALT|KEY_SHIFT|KEY_F2,
+ KEY_ALTSHIFTF3 =KEY_ALT|KEY_SHIFT|KEY_F3,
+ KEY_ALTSHIFTF4 =KEY_ALT|KEY_SHIFT|KEY_F4,
+ KEY_ALTSHIFTF5 =KEY_ALT|KEY_SHIFT|KEY_F5,
+ KEY_ALTSHIFTF6 =KEY_ALT|KEY_SHIFT|KEY_F6,
+ KEY_ALTSHIFTF7 =KEY_ALT|KEY_SHIFT|KEY_F7,
+ KEY_ALTSHIFTF8 =KEY_ALT|KEY_SHIFT|KEY_F8,
+ KEY_ALTSHIFTF9 =KEY_ALT|KEY_SHIFT|KEY_F9,
+ KEY_ALTSHIFTF10 =KEY_ALT|KEY_SHIFT|KEY_F10,
+ KEY_ALTSHIFTF11 =KEY_ALT|KEY_SHIFT|KEY_F11,
+ KEY_ALTSHIFTF12 =KEY_ALT|KEY_SHIFT|KEY_F12,
+
+ KEY_CTRLALTF1 =KEY_CTRL|KEY_ALT|KEY_F1,
+ KEY_CTRLALTF2 =KEY_CTRL|KEY_ALT|KEY_F2,
+ KEY_CTRLALTF3 =KEY_CTRL|KEY_ALT|KEY_F3,
+ KEY_CTRLALTF4 =KEY_CTRL|KEY_ALT|KEY_F4,
+ KEY_CTRLALTF5 =KEY_CTRL|KEY_ALT|KEY_F5,
+ KEY_CTRLALTF6 =KEY_CTRL|KEY_ALT|KEY_F6,
+ KEY_CTRLALTF7 =KEY_CTRL|KEY_ALT|KEY_F7,
+ KEY_CTRLALTF8 =KEY_CTRL|KEY_ALT|KEY_F8,
+ KEY_CTRLALTF9 =KEY_CTRL|KEY_ALT|KEY_F9,
+ KEY_CTRLALTF10 =KEY_CTRL|KEY_ALT|KEY_F10,
+ KEY_CTRLALTF11 =KEY_CTRL|KEY_ALT|KEY_F11,
+ KEY_CTRLALTF12 =KEY_CTRL|KEY_ALT|KEY_F12,
+
+ KEY_CTRLHOME =KEY_CTRL|KEY_HOME,
+ KEY_CTRLUP =KEY_CTRL|KEY_UP,
+ KEY_CTRLPGUP =KEY_CTRL|KEY_PGUP,
+ KEY_CTRLLEFT =KEY_CTRL|KEY_LEFT,
+ KEY_CTRLRIGHT =KEY_CTRL|KEY_RIGHT,
+ KEY_CTRLEND =KEY_CTRL|KEY_END,
+ KEY_CTRLDOWN =KEY_CTRL|KEY_DOWN,
+ KEY_CTRLPGDN =KEY_CTRL|KEY_PGDN,
+ KEY_CTRLINS =KEY_CTRL|KEY_INS,
+ KEY_CTRLDEL =KEY_CTRL|KEY_DEL,
+ KEY_CTRLNUMDEL =KEY_CTRL|KEY_NUMDEL,
+ KEY_CTRLDECIMAL =KEY_CTRL|KEY_DECIMAL,
+
+ KEY_SHIFTHOME =KEY_SHIFT|KEY_HOME,
+ KEY_SHIFTUP =KEY_SHIFT|KEY_UP,
+ KEY_SHIFTPGUP =KEY_SHIFT|KEY_PGUP,
+ KEY_SHIFTLEFT =KEY_SHIFT|KEY_LEFT,
+ KEY_SHIFTRIGHT =KEY_SHIFT|KEY_RIGHT,
+ KEY_SHIFTEND =KEY_SHIFT|KEY_END,
+ KEY_SHIFTDOWN =KEY_SHIFT|KEY_DOWN,
+ KEY_SHIFTPGDN =KEY_SHIFT|KEY_PGDN,
+ KEY_SHIFTINS =KEY_SHIFT|KEY_INS,
+ KEY_SHIFTDEL =KEY_SHIFT|KEY_DEL,
+ KEY_SHIFTNUMDEL =KEY_SHIFT|KEY_NUMDEL,
+ KEY_SHIFTDECIMAL =KEY_SHIFT|KEY_DECIMAL,
+
+ KEY_ALTHOME =KEY_ALT|KEY_HOME,
+ KEY_ALTUP =KEY_ALT|KEY_UP,
+ KEY_ALTPGUP =KEY_ALT|KEY_PGUP,
+ KEY_ALTLEFT =KEY_ALT|KEY_LEFT,
+ KEY_ALTRIGHT =KEY_ALT|KEY_RIGHT,
+ KEY_ALTEND =KEY_ALT|KEY_END,
+ KEY_ALTDOWN =KEY_ALT|KEY_DOWN,
+ KEY_ALTPGDN =KEY_ALT|KEY_PGDN,
+ KEY_ALTINS =KEY_ALT|KEY_INS,
+ KEY_ALTDEL =KEY_ALT|KEY_DEL,
+ KEY_ALTNUMDEL =KEY_ALT|KEY_NUMDEL,
+ KEY_ALTDECIMAL =KEY_ALT|KEY_DECIMAL,
+
+ KEY_CTRLSHIFTHOME =KEY_CTRL|KEY_SHIFT|KEY_HOME,
+ KEY_CTRLSHIFTUP =KEY_CTRL|KEY_SHIFT|KEY_UP,
+ KEY_CTRLSHIFTPGUP =KEY_CTRL|KEY_SHIFT|KEY_PGUP,
+ KEY_CTRLSHIFTLEFT =KEY_CTRL|KEY_SHIFT|KEY_LEFT,
+ KEY_CTRLSHIFTRIGHT =KEY_CTRL|KEY_SHIFT|KEY_RIGHT,
+ KEY_CTRLSHIFTEND =KEY_CTRL|KEY_SHIFT|KEY_END,
+ KEY_CTRLSHIFTDOWN =KEY_CTRL|KEY_SHIFT|KEY_DOWN,
+ KEY_CTRLSHIFTPGDN =KEY_CTRL|KEY_SHIFT|KEY_PGDN,
+ KEY_CTRLSHIFTINS =KEY_CTRL|KEY_SHIFT|KEY_INS,
+ KEY_CTRLSHIFTDEL =KEY_CTRL|KEY_SHIFT|KEY_DEL,
+ KEY_CTRLSHIFTNUMDEL =KEY_CTRL|KEY_SHIFT|KEY_NUMDEL,
+ KEY_CTRLSHIFTDECIMAL =KEY_CTRL|KEY_SHIFT|KEY_DECIMAL,
+
+ KEY_ALTSHIFTHOME =KEY_ALT|KEY_SHIFT|KEY_HOME,
+ KEY_ALTSHIFTUP =KEY_ALT|KEY_SHIFT|KEY_UP,
+ KEY_ALTSHIFTPGUP =KEY_ALT|KEY_SHIFT|KEY_PGUP,
+ KEY_ALTSHIFTLEFT =KEY_ALT|KEY_SHIFT|KEY_LEFT,
+ KEY_ALTSHIFTRIGHT =KEY_ALT|KEY_SHIFT|KEY_RIGHT,
+ KEY_ALTSHIFTEND =KEY_ALT|KEY_SHIFT|KEY_END,
+ KEY_ALTSHIFTDOWN =KEY_ALT|KEY_SHIFT|KEY_DOWN,
+ KEY_ALTSHIFTPGDN =KEY_ALT|KEY_SHIFT|KEY_PGDN,
+ KEY_ALTSHIFTINS =KEY_ALT|KEY_SHIFT|KEY_INS,
+ KEY_ALTSHIFTDEL =KEY_ALT|KEY_SHIFT|KEY_DEL,
+ KEY_ALTSHIFTNUMDEL =KEY_ALT|KEY_SHIFT|KEY_NUMDEL,
+ KEY_ALTSHIFTDECIMAL =KEY_ALT|KEY_SHIFT|KEY_DECIMAL,
+
+ KEY_CTRLALTHOME =KEY_CTRL|KEY_ALT|KEY_HOME,
+ KEY_CTRLALTUP =KEY_CTRL|KEY_ALT|KEY_UP,
+ KEY_CTRLALTPGUP =KEY_CTRL|KEY_ALT|KEY_PGUP,
+ KEY_CTRLALTLEFT =KEY_CTRL|KEY_ALT|KEY_LEFT,
+ KEY_CTRLALTRIGHT =KEY_CTRL|KEY_ALT|KEY_RIGHT,
+ KEY_CTRLALTEND =KEY_CTRL|KEY_ALT|KEY_END,
+ KEY_CTRLALTDOWN =KEY_CTRL|KEY_ALT|KEY_DOWN,
+ KEY_CTRLALTPGDN =KEY_CTRL|KEY_ALT|KEY_PGDN,
+ KEY_CTRLALTINS =KEY_CTRL|KEY_ALT|KEY_INS,
+
+ KEY_CTRLNUMPAD0 =KEY_CTRL|KEY_NUMPAD0,
+ KEY_CTRLNUMPAD1 =KEY_CTRL|KEY_NUMPAD1,
+ KEY_CTRLNUMPAD2 =KEY_CTRL|KEY_NUMPAD2,
+ KEY_CTRLNUMPAD3 =KEY_CTRL|KEY_NUMPAD3,
+ KEY_CTRLNUMPAD4 =KEY_CTRL|KEY_NUMPAD4,
+ KEY_CTRLNUMPAD5 =KEY_CTRL|KEY_NUMPAD5,
+ KEY_CTRLNUMPAD6 =KEY_CTRL|KEY_NUMPAD6,
+ KEY_CTRLNUMPAD7 =KEY_CTRL|KEY_NUMPAD7,
+ KEY_CTRLNUMPAD8 =KEY_CTRL|KEY_NUMPAD8,
+ KEY_CTRLNUMPAD9 =KEY_CTRL|KEY_NUMPAD9,
+
+ KEY_SHIFTNUMPAD0 =KEY_SHIFT|KEY_NUMPAD0,
+ KEY_SHIFTNUMPAD1 =KEY_SHIFT|KEY_NUMPAD1,
+ KEY_SHIFTNUMPAD2 =KEY_SHIFT|KEY_NUMPAD2,
+ KEY_SHIFTNUMPAD3 =KEY_SHIFT|KEY_NUMPAD3,
+ KEY_SHIFTNUMPAD4 =KEY_SHIFT|KEY_NUMPAD4,
+ KEY_SHIFTNUMPAD5 =KEY_SHIFT|KEY_NUMPAD5,
+ KEY_SHIFTNUMPAD6 =KEY_SHIFT|KEY_NUMPAD6,
+ KEY_SHIFTNUMPAD7 =KEY_SHIFT|KEY_NUMPAD7,
+ KEY_SHIFTNUMPAD8 =KEY_SHIFT|KEY_NUMPAD8,
+ KEY_SHIFTNUMPAD9 =KEY_SHIFT|KEY_NUMPAD9,
+
+ KEY_CTRLSHIFTNUMPAD0 =KEY_CTRL|KEY_SHIFT|KEY_NUMPAD0,
+ KEY_CTRLSHIFTNUMPAD1 =KEY_CTRL|KEY_SHIFT|KEY_NUMPAD1,
+ KEY_CTRLSHIFTNUMPAD2 =KEY_CTRL|KEY_SHIFT|KEY_NUMPAD2,
+ KEY_CTRLSHIFTNUMPAD3 =KEY_CTRL|KEY_SHIFT|KEY_NUMPAD3,
+ KEY_CTRLSHIFTNUMPAD4 =KEY_CTRL|KEY_SHIFT|KEY_NUMPAD4,
+ KEY_CTRLSHIFTNUMPAD5 =KEY_CTRL|KEY_SHIFT|KEY_NUMPAD5,
+ KEY_CTRLSHIFTNUMPAD6 =KEY_CTRL|KEY_SHIFT|KEY_NUMPAD6,
+ KEY_CTRLSHIFTNUMPAD7 =KEY_CTRL|KEY_SHIFT|KEY_NUMPAD7,
+ KEY_CTRLSHIFTNUMPAD8 =KEY_CTRL|KEY_SHIFT|KEY_NUMPAD8,
+ KEY_CTRLSHIFTNUMPAD9 =KEY_CTRL|KEY_SHIFT|KEY_NUMPAD9,
+
+ KEY_CTRLALTNUMPAD0 =KEY_CTRL|KEY_ALT|KEY_NUMPAD0,
+ KEY_CTRLALTNUMPAD1 =KEY_CTRL|KEY_ALT|KEY_NUMPAD1,
+ KEY_CTRLALTNUMPAD2 =KEY_CTRL|KEY_ALT|KEY_NUMPAD2,
+ KEY_CTRLALTNUMPAD3 =KEY_CTRL|KEY_ALT|KEY_NUMPAD3,
+ KEY_CTRLALTNUMPAD4 =KEY_CTRL|KEY_ALT|KEY_NUMPAD4,
+ KEY_CTRLALTNUMPAD5 =KEY_CTRL|KEY_ALT|KEY_NUMPAD5,
+ KEY_CTRLALTNUMPAD6 =KEY_CTRL|KEY_ALT|KEY_NUMPAD6,
+ KEY_CTRLALTNUMPAD7 =KEY_CTRL|KEY_ALT|KEY_NUMPAD7,
+ KEY_CTRLALTNUMPAD8 =KEY_CTRL|KEY_ALT|KEY_NUMPAD8,
+ KEY_CTRLALTNUMPAD9 =KEY_CTRL|KEY_ALT|KEY_NUMPAD9,
+
+ KEY_ALTSHIFTNUMPAD0 =KEY_ALT|KEY_SHIFT|KEY_NUMPAD0,
+ KEY_ALTSHIFTNUMPAD1 =KEY_ALT|KEY_SHIFT|KEY_NUMPAD1,
+ KEY_ALTSHIFTNUMPAD2 =KEY_ALT|KEY_SHIFT|KEY_NUMPAD2,
+ KEY_ALTSHIFTNUMPAD3 =KEY_ALT|KEY_SHIFT|KEY_NUMPAD3,
+ KEY_ALTSHIFTNUMPAD4 =KEY_ALT|KEY_SHIFT|KEY_NUMPAD4,
+ KEY_ALTSHIFTNUMPAD5 =KEY_ALT|KEY_SHIFT|KEY_NUMPAD5,
+ KEY_ALTSHIFTNUMPAD6 =KEY_ALT|KEY_SHIFT|KEY_NUMPAD6,
+ KEY_ALTSHIFTNUMPAD7 =KEY_ALT|KEY_SHIFT|KEY_NUMPAD7,
+ KEY_ALTSHIFTNUMPAD8 =KEY_ALT|KEY_SHIFT|KEY_NUMPAD8,
+ KEY_ALTSHIFTNUMPAD9 =KEY_ALT|KEY_SHIFT|KEY_NUMPAD9,
+
+ KEY_CTRLSLASH =KEY_CTRL|KEY_SLASH,
+ KEY_CTRLBACKSLASH =KEY_CTRL|KEY_BACKSLASH,
+ KEY_CTRLCLEAR =KEY_CTRL|KEY_CLEAR,
+ KEY_CTRLSHIFTCLEAR =KEY_CTRL|KEY_SHIFT|KEY_CLEAR,
+ KEY_CTRLALTCLEAR =KEY_CTRL|KEY_ALT|KEY_CLEAR,
+ KEY_CTRLADD =KEY_CTRL|KEY_ADD,
+ KEY_SHIFTADD =KEY_SHIFT|KEY_ADD,
+
+ KEY_CTRLSUBTRACT =KEY_CTRL|KEY_SUBTRACT,
+ KEY_ALTSUBTRACT =KEY_ALT|KEY_SUBTRACT,
+ KEY_SHIFTSUBTRACT =KEY_SHIFT|KEY_SUBTRACT,
+ KEY_CTRLMULTIPLY =KEY_CTRL|KEY_MULTIPLY,
+
+ KEY_CTRLBS =KEY_CTRL|KEY_BS,
+ KEY_ALTBS =KEY_ALT|KEY_BS,
+ KEY_CTRLSHIFTBS =KEY_CTRL|KEY_SHIFT|KEY_BS,
+ KEY_SHIFTBS =KEY_SHIFT|KEY_BS,
+
+ KEY_CTRLSHIFTTAB =KEY_CTRL|KEY_SHIFT|KEY_TAB,
+ KEY_CTRLTAB =KEY_CTRL|KEY_TAB,
+ KEY_SHIFTTAB =KEY_SHIFT|KEY_TAB,
+
+ KEY_CTRLENTER =KEY_CTRL|KEY_ENTER,
+ KEY_SHIFTENTER =KEY_SHIFT|KEY_ENTER,
+ KEY_ALTSHIFTENTER =KEY_ALT|KEY_SHIFT|KEY_ENTER,
+ KEY_CTRLALTENTER =KEY_CTRL|KEY_ALT|KEY_ENTER,
+ KEY_CTRLSHIFTENTER =KEY_CTRL|KEY_SHIFT|KEY_ENTER,
+
+ KEY_CTRLNUMENTER =KEY_CTRL|KEY_NUMENTER,
+ KEY_SHIFTNUMENTER =KEY_SHIFT|KEY_NUMENTER,
+ KEY_ALTSHIFTNUMENTER =KEY_ALT|KEY_SHIFT|KEY_NUMENTER,
+ KEY_CTRLALTNUMENTER =KEY_CTRL|KEY_ALT|KEY_NUMENTER,
+ KEY_CTRLSHIFTNUMENTER =KEY_CTRL|KEY_SHIFT|KEY_NUMENTER,
+
+ KEY_CTRLAPPS =KEY_CTRL|KEY_APPS,
+ KEY_ALTAPPS =KEY_ALT|KEY_APPS,
+ KEY_SHIFTAPPS =KEY_SHIFT|KEY_APPS,
+ KEY_CTRLSHIFTAPPS =KEY_CTRL|KEY_SHIFT|KEY_APPS,
+ KEY_ALTSHIFTAPPS =KEY_ALT|KEY_SHIFT|KEY_APPS,
+ KEY_CTRLALTAPPS =KEY_CTRL|KEY_ALT|KEY_APPS,
+
+ KEY_CTRLSPACE =KEY_CTRL|KEY_SPACE,
+ KEY_SHIFTSPACE =KEY_SHIFT|KEY_SPACE,
+ KEY_CTRLSHIFTSPACE =KEY_CTRL|KEY_SHIFT|KEY_SPACE,
+
+ KEY_ALT_BASE =KEY_ALT,
+ KEY_ALTSHIFT_BASE =KEY_ALTSHIFT,
+};
diff --git a/python/configs/plug/far2l/farwin.h b/python/configs/plug/far2l/farwin.h
new file mode 100644
index 00000000..c1e27f9f
--- /dev/null
+++ b/python/configs/plug/far2l/farwin.h
@@ -0,0 +1,293 @@
+typedef uint32_t ULONG;
+typedef unsigned int UINT;
+typedef unsigned short USHORT;
+typedef int LONG;
+typedef int INT, *PINT, *LPINT;
+typedef short SHORT;
+typedef long long LONGLONG;
+typedef unsigned long long ULONGLONG;
+typedef void VOID;
+
+typedef size_t SIZE_T;
+
+typedef char CCHAR; // winnt
+typedef short CSHORT;
+typedef ULONG CLONG;
+
+typedef CCHAR *PCCHAR;
+typedef CSHORT *PCSHORT;
+typedef CLONG *PCLONG;
+
+typedef ULONG DWORD;
+typedef USHORT WORD;
+
+typedef unsigned long long DWORD64, *PDWORD64;
+typedef int64_t INT64, *PINT64;
+typedef uint64_t UINT64, *PUINT64;
+typedef int64_t LONG64, *PLONG64;
+typedef uint64_t ULONG64, *PULONG64;
+
+typedef INT64 INT_PTR;
+typedef UINT64 UINT_PTR;
+typedef DWORD64 DWORD_PTR;
+typedef LONG64 LONG_PTR;
+typedef ULONG64 ULONG_PTR;
+
+typedef char *LPCSTR;
+typedef char *LPSTR;
+typedef char *PSTR;
+
+typedef wchar_t *LPCWSTR, * LPCTSTR;
+typedef wchar_t *LPWSTR, *LPTSTR;
+typedef wchar_t *PWSTR;
+
+typedef wchar_t WCHAR, TCHAR;
+typedef char CHAR;
+typedef unsigned char UCHAR;
+typedef unsigned char BYTE;
+typedef BYTE *PBYTE;
+typedef BYTE *LPBYTE;
+
+typedef DWORD *LPDWORD;
+typedef DWORD *PDWORD;
+typedef ULONG *PULONG;
+typedef LONG *PLONG;
+typedef WORD *LPWORD;
+typedef WORD *PWORD;
+typedef USHORT *PUSHORT;
+typedef SHORT *PSHORT;
+
+typedef LONGLONG *PLONGLONG;
+typedef ULONGLONG *PULONGLONG;
+
+typedef int BOOL;
+typedef UCHAR BOOLEAN;
+typedef BOOL *LPBOOL, *PBOOL;
+
+typedef void *HANDLE;
+typedef void *PVOID;
+typedef void *LPVOID;
+typedef void *LPCVOID;
+
+typedef ULONG LCID; // winnt
+typedef PULONG PLCID; // winnt
+typedef USHORT LANGID; // winnt
+
+
+typedef HANDLE HKEY;
+typedef struct _OVERLAPPED *LPOVERLAPPED;
+typedef HKEY *PHKEY;
+
+typedef DWORD ACCESS_MASK;
+typedef ACCESS_MASK *PACCESS_MASK;
+typedef ACCESS_MASK REGSAM;
+
+typedef int HRESULT;
+
+typedef struct _GUID {
+ unsigned long Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[ 8 ];
+} GUID, IID;
+
+typedef struct tagRECT {
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
+} RECT;
+
+
+#define DRIVE_UNKNOWN 0
+#define DRIVE_NO_ROOT_DIR 1
+#define DRIVE_REMOVABLE 2
+#define DRIVE_FIXED 3
+#define DRIVE_REMOTE 4
+#define DRIVE_CDROM 5
+#define DRIVE_RAMDISK 6
+
+
+
+typedef struct _FILETIME {
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+} FILETIME, *PFILETIME, *LPFILETIME;
+
+typedef union _LARGE_INTEGER {
+ struct {
+ DWORD LowPart;
+ LONG HighPart;
+ } u;
+ struct {
+ DWORD LowPart;
+ LONG HighPart;
+ };
+ LONGLONG QuadPart;
+} LARGE_INTEGER;
+typedef LARGE_INTEGER *PLARGE_INTEGER;
+
+typedef union _ULARGE_INTEGER {
+ struct {
+ DWORD LowPart;
+ DWORD HighPart;
+ } u;
+ struct {
+ DWORD LowPart;
+ DWORD HighPart;
+ };
+ ULONGLONG QuadPart;
+} ULARGE_INTEGER;
+typedef ULARGE_INTEGER *PULARGE_INTEGER;
+
+typedef struct _COORD {
+ SHORT X;
+ SHORT Y;
+} COORD, *PCOORD;
+
+typedef struct _CONSOLE_FONT_INFO {
+ DWORD nFont;
+ COORD dwFontSize;
+} CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;
+
+typedef struct _SMALL_RECT {
+ SHORT Left;
+ SHORT Top;
+ SHORT Right;
+ SHORT Bottom;
+} SMALL_RECT, *PSMALL_RECT;
+
+typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
+ COORD dwSize;
+ COORD dwCursorPosition;
+ WORD wAttributes;
+ SMALL_RECT srWindow;
+ COORD dwMaximumWindowSize;
+} CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;
+
+typedef struct _CONSOLE_CURSOR_INFO {
+ DWORD dwSize;
+ BOOL bVisible;
+} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
+
+typedef struct _CHAR_INFO {
+ union {
+ WCHAR UnicodeChar;
+ CHAR AsciiChar;
+ } Char;
+ WORD Attributes;
+} CHAR_INFO, *PCHAR_INFO;
+
+
+typedef struct _WINDOW_BUFFER_SIZE_RECORD {
+ COORD dwSize;
+} WINDOW_BUFFER_SIZE_RECORD, *PWINDOW_BUFFER_SIZE_RECORD;
+
+typedef struct _MENU_EVENT_RECORD {
+ UINT dwCommandId;
+} MENU_EVENT_RECORD, *PMENU_EVENT_RECORD;
+
+typedef struct _FOCUS_EVENT_RECORD {
+ BOOL bSetFocus;
+} FOCUS_EVENT_RECORD, *PFOCUS_EVENT_RECORD;
+
+typedef struct _KEY_EVENT_RECORD {
+ BOOL bKeyDown;
+ WORD wRepeatCount;
+ WORD wVirtualKeyCode;
+ WORD wVirtualScanCode;
+ union {
+ WCHAR UnicodeChar;
+ CHAR AsciiChar;
+ } uChar;
+ DWORD dwControlKeyState;
+} KEY_EVENT_RECORD, *PKEY_EVENT_RECORD;
+
+//
+// ControlKeyState flags
+//
+
+#define RIGHT_ALT_PRESSED 0x0001 // the right alt key is pressed.
+#define LEFT_ALT_PRESSED 0x0002 // the left alt key is pressed.
+#define RIGHT_CTRL_PRESSED 0x0004 // the right ctrl key is pressed.
+#define LEFT_CTRL_PRESSED 0x0008 // the left ctrl key is pressed.
+#define SHIFT_PRESSED 0x0010 // the shift key is pressed.
+#define NUMLOCK_ON 0x0020 // the numlock light is on.
+#define SCROLLLOCK_ON 0x0040 // the scrolllock light is on.
+#define CAPSLOCK_ON 0x0080 // the capslock light is on.
+#define ENHANCED_KEY 0x0100 // the key is enhanced.
+#define NLS_DBCSCHAR 0x00010000 // DBCS for JPN: SBCS/DBCS mode.
+#define NLS_ALPHANUMERIC 0x00000000 // DBCS for JPN: Alphanumeric mode.
+#define NLS_KATAKANA 0x00020000 // DBCS for JPN: Katakana mode.
+#define NLS_HIRAGANA 0x00040000 // DBCS for JPN: Hiragana mode.
+#define NLS_ROMAN 0x00400000 // DBCS for JPN: Roman/Noroman mode.
+#define NLS_IME_CONVERSION 0x00800000 // DBCS for JPN: IME conversion.
+#define NLS_IME_DISABLE 0x20000000 // DBCS for JPN: IME enable/disable.
+
+
+typedef struct _MOUSE_EVENT_RECORD {
+ COORD dwMousePosition;
+ DWORD dwButtonState;
+ DWORD dwControlKeyState;
+ DWORD dwEventFlags;
+} MOUSE_EVENT_RECORD, *PMOUSE_EVENT_RECORD;
+#define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
+#define RIGHTMOST_BUTTON_PRESSED 0x0002
+#define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004
+#define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008
+#define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010
+
+#define MOUSE_MOVED 0x0001
+#define DOUBLE_CLICK 0x0002
+#define MOUSE_WHEELED 0x0004
+#define MOUSE_HWHEELED 0x0008
+
+
+#define NOOP_EVENT 0x0000
+#define KEY_EVENT 0x0001 // Event contains key event record
+#define MOUSE_EVENT 0x0002 // Event contains mouse event record
+#define WINDOW_BUFFER_SIZE_EVENT 0x0004 // Event contains window change event record
+#define MENU_EVENT 0x0008 // Event contains menu event record
+#define FOCUS_EVENT 0x0010 // event contains focus change
+
+
+typedef struct _INPUT_RECORD {
+ WORD EventType;
+ union {
+ KEY_EVENT_RECORD KeyEvent;
+ MOUSE_EVENT_RECORD MouseEvent;
+ WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
+ MENU_EVENT_RECORD MenuEvent;
+ FOCUS_EVENT_RECORD FocusEvent;
+ } Event;
+} INPUT_RECORD, *PINPUT_RECORD;
+
+
+
+#define FOREGROUND_BLUE 0x0001 // text color contains blue.
+#define FOREGROUND_GREEN 0x0002 // text color contains green.
+#define FOREGROUND_RED 0x0004 // text color contains red.
+#define FOREGROUND_INTENSITY 0x0008 // text color is intensified.
+#define BACKGROUND_BLUE 0x0010 // background color contains blue.
+#define BACKGROUND_GREEN 0x0020 // background color contains green.
+#define BACKGROUND_RED 0x0040 // background color contains red.
+#define BACKGROUND_INTENSITY 0x0080 // background color is intensified.
+#define COMMON_LVB_LEADING_BYTE 0x0100 // Leading Byte of DBCS
+#define COMMON_LVB_TRAILING_BYTE 0x0200 // Trailing Byte of DBCS
+#define COMMON_LVB_GRID_HORIZONTAL 0x0400 // DBCS: Grid attribute: top horizontal.
+#define COMMON_LVB_GRID_LVERTICAL 0x0800 // DBCS: Grid attribute: left vertical.
+#define COMMON_LVB_GRID_RVERTICAL 0x1000 // DBCS: Grid attribute: right vertical.
+#define COMMON_LVB_REVERSE_VIDEO 0x4000 // DBCS: Reverse fore/back ground attribute.
+#define COMMON_LVB_UNDERSCORE 0x8000 // DBCS: Underscore.
+
+#define COMMON_LVB_SBCSDBCS 0x0300 // SBCS or DBCS flag.
+
+
+
+
+
+
+
+
+typedef struct _INPUT_RECORD INPUT_RECORD;
+typedef struct _CHAR_INFO CHAR_INFO;
diff --git a/python/configs/plug/far2l/logger.py b/python/configs/plug/far2l/logger.py
new file mode 100644
index 00000000..6e18dec0
--- /dev/null
+++ b/python/configs/plug/far2l/logger.py
@@ -0,0 +1,23 @@
+import os
+import sys
+
+class Logger:
+ def __init__(self):
+ self.stdout = sys.stdout
+ self.stderr = sys.stderr
+ self.fp = open('/tmp/far2.py.log-py','at')
+ def write(self, msg):
+ self.fp.write(msg)
+ self.fp.flush()
+ def flush(self):
+ self.fp.flush()
+ def close(self):
+ self.fp.close()
+ sys.stdout = self.stdout
+ sys.stderr = self.stderr
+
+sys.stderr = sys.stdout = Logger()
+
+print('%s start' % ('*'*20))
+print('sys.path=', sys.path)
+print('cwd=', os.getcwd())
diff --git a/python/configs/plug/far2l/plugin.hpp b/python/configs/plug/far2l/plugin.hpp
new file mode 100644
index 00000000..8d08cd13
--- /dev/null
+++ b/python/configs/plug/far2l/plugin.hpp
@@ -0,0 +1,2062 @@
+#define FARMANAGERVERSION_MAJOR 2
+#define FARMANAGERVERSION_MINOR 2
+
+//#define MAKEFARVERSION(major,minor) ( ((major)<<16) | (minor))
+
+//#define FARMANAGERVERSION MAKEFARVERSION(FARMANAGERVERSION_MAJOR,FARMANAGERVERSION_MINOR)
+
+//#define FARMACRO_KEY_EVENT KEY_EVENT|0x8000
+
+typedef struct _INPUT_RECORD INPUT_RECORD;
+typedef struct _CHAR_INFO CHAR_INFO;
+
+#define CP_UNICODE 1200
+#define CP_REVERSEBOM 1201
+#define CP_AUTODETECT -1
+
+enum FARMESSAGEFLAGS
+{
+ FMSG_WARNING = 0x00000001,
+ FMSG_ERRORTYPE = 0x00000002,
+ FMSG_KEEPBACKGROUND = 0x00000004,
+ FMSG_LEFTALIGN = 0x00000010,
+
+ FMSG_ALLINONE = 0x00000020,
+ FMSG_COLOURS = 0x00000040,
+
+ FMSG_MB_OK = 0x00010000,
+ FMSG_MB_OKCANCEL = 0x00020000,
+ FMSG_MB_ABORTRETRYIGNORE = 0x00030000,
+ FMSG_MB_YESNO = 0x00040000,
+ FMSG_MB_YESNOCANCEL = 0x00050000,
+ FMSG_MB_RETRYCANCEL = 0x00060000,
+};
+
+typedef int (*FARAPIMESSAGE)(
+ INT_PTR PluginNumber,
+ DWORD Flags,
+ const wchar_t *HelpTopic,
+ const wchar_t * const *Items,
+ int ItemsNumber,
+ int ButtonsNumber
+);
+
+
+enum DialogItemTypes
+{
+ DI_TEXT,
+ DI_VTEXT,
+ DI_SINGLEBOX,
+ DI_DOUBLEBOX,
+ DI_EDIT,
+ DI_PSWEDIT,
+ DI_FIXEDIT,
+ DI_BUTTON,
+ DI_CHECKBOX,
+ DI_RADIOBUTTON,
+ DI_COMBOBOX,
+ DI_LISTBOX,
+ DI_MEMOEDIT,
+ DI_USERCONTROL=255,
+};
+
+/*
+ Check diagol element type has inputstring?
+ (DI_EDIT, DI_FIXEDIT, DI_PSWEDIT, etc)
+static __inline BOOL IsEdit(int Type)
+{
+ switch (Type)
+ {
+ case DI_EDIT:
+ case DI_FIXEDIT:
+ case DI_PSWEDIT:
+ case DI_MEMOEDIT:
+ case DI_COMBOBOX:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+*/
+
+
+enum FarDialogItemFlags
+{
+ DIF_NONE = 0,
+ DIF_COLORMASK = 0x000000ffUL,
+ DIF_SETCOLOR = 0x00000100UL,
+ DIF_BOXCOLOR = 0x00000200UL,
+ DIF_DEFAULT = 0x00000200UL,
+ DIF_GROUP = 0x00000400UL,
+ DIF_LEFTTEXT = 0x00000800UL,
+ DIF_FOCUS = 0x00000800UL,
+ DIF_MOVESELECT = 0x00001000UL,
+ DIF_SHOWAMPERSAND = 0x00002000UL,
+ DIF_CENTERGROUP = 0x00004000UL,
+ DIF_NOBRACKETS = 0x00008000UL,
+ DIF_MANUALADDHISTORY = 0x00008000UL,
+ DIF_SEPARATOR = 0x00010000UL,
+ DIF_SEPARATOR2 = 0x00020000UL,
+ DIF_EDITOR = 0x00020000UL,
+ DIF_LISTNOAMPERSAND = 0x00020000UL,
+ DIF_LISTNOBOX = 0x00040000UL,
+ DIF_HISTORY = 0x00040000UL,
+ DIF_BTNNOCLOSE = 0x00040000UL,
+ DIF_CENTERTEXT = 0x00040000UL,
+ DIF_SEPARATORUSER = 0x00080000UL,
+ DIF_SETSHIELD = 0x00080000UL,
+ DIF_EDITEXPAND = 0x00080000UL,
+ DIF_DROPDOWNLIST = 0x00100000UL,
+ DIF_USELASTHISTORY = 0x00200000UL,
+ DIF_MASKEDIT = 0x00400000UL,
+ DIF_SELECTONENTRY = 0x00800000UL,
+ DIF_3STATE = 0x00800000UL,
+ DIF_EDITPATH = 0x01000000UL,
+ DIF_LISTWRAPMODE = 0x01000000UL,
+ DIF_NOAUTOCOMPLETE = 0x02000000UL,
+ DIF_LISTAUTOHIGHLIGHT = 0x02000000UL,
+ DIF_LISTNOCLOSE = 0x04000000UL,
+ DIF_AUTOMATION = 0x08000000UL,
+ DIF_HIDDEN = 0x10000000UL,
+ DIF_READONLY = 0x20000000UL,
+ DIF_NOFOCUS = 0x40000000UL,
+ DIF_DISABLE = 0x80000000UL,
+};
+
+enum FarMessagesProc
+{
+ DM_FIRST=0,
+ DM_CLOSE,
+ DM_ENABLE,
+ DM_ENABLEREDRAW,
+ DM_GETDLGDATA,
+ DM_GETDLGITEM,
+ DM_GETDLGRECT,
+ DM_GETTEXT,
+ DM_GETTEXTLENGTH,
+ DM_KEY,
+ DM_MOVEDIALOG,
+ DM_SETDLGDATA,
+ DM_SETDLGITEM,
+ DM_SETFOCUS,
+ DM_REDRAW,
+ DM_SETREDRAW=DM_REDRAW,
+ DM_SETTEXT,
+ DM_SETMAXTEXTLENGTH,
+ DM_SETTEXTLENGTH=DM_SETMAXTEXTLENGTH,
+ DM_SHOWDIALOG,
+ DM_GETFOCUS,
+ DM_GETCURSORPOS,
+ DM_SETCURSORPOS,
+ DM_GETTEXTPTR,
+ DM_SETTEXTPTR,
+ DM_SHOWITEM,
+ DM_ADDHISTORY,
+
+ DM_GETCHECK,
+ DM_SETCHECK,
+ DM_SET3STATE,
+
+ DM_LISTSORT,
+ DM_LISTGETITEM,
+ DM_LISTGETCURPOS,
+ DM_LISTSETCURPOS,
+ DM_LISTDELETE,
+ DM_LISTADD,
+ DM_LISTADDSTR,
+ DM_LISTUPDATE,
+ DM_LISTINSERT,
+ DM_LISTFINDSTRING,
+ DM_LISTINFO,
+ DM_LISTGETDATA,
+ DM_LISTSETDATA,
+ DM_LISTSETTITLES,
+ DM_LISTGETTITLES,
+
+ DM_RESIZEDIALOG,
+ DM_SETITEMPOSITION,
+
+ DM_GETDROPDOWNOPENED,
+ DM_SETDROPDOWNOPENED,
+
+ DM_SETHISTORY,
+
+ DM_GETITEMPOSITION,
+ DM_SETMOUSEEVENTNOTIFY,
+
+ DM_EDITUNCHANGEDFLAG,
+
+ DM_GETITEMDATA,
+ DM_SETITEMDATA,
+
+ DM_LISTSET,
+ DM_LISTSETMOUSEREACTION,
+
+ DM_GETCURSORSIZE,
+ DM_SETCURSORSIZE,
+
+ DM_LISTGETDATASIZE,
+
+ DM_GETSELECTION,
+ DM_SETSELECTION,
+
+ DM_GETEDITPOSITION,
+ DM_SETEDITPOSITION,
+
+ DM_SETCOMBOBOXEVENT,
+ DM_GETCOMBOBOXEVENT,
+
+ DM_GETCONSTTEXTPTR,
+ DM_GETDLGITEMSHORT,
+ DM_SETDLGITEMSHORT,
+
+ DM_GETDIALOGINFO,
+
+ DN_FIRST=0x1000,
+ DN_BTNCLICK,
+ DN_CTLCOLORDIALOG,
+ DN_CTLCOLORDLGITEM,
+ DN_CTLCOLORDLGLIST,
+ DN_DRAWDIALOG,
+ DN_DRAWDLGITEM,
+ DN_EDITCHANGE,
+ DN_ENTERIDLE,
+ DN_GOTFOCUS,
+ DN_HELP,
+ DN_HOTKEY,
+ DN_INITDIALOG,
+ DN_KILLFOCUS,
+ DN_LISTCHANGE,
+ DN_MOUSECLICK,
+ DN_DRAGGED,
+ DN_RESIZECONSOLE,
+ DN_MOUSEEVENT,
+ DN_DRAWDIALOGDONE,
+ DN_LISTHOTKEY,
+
+ DN_GETDIALOGINFO=DM_GETDIALOGINFO,
+
+ DN_CLOSE=DM_CLOSE,
+ DN_KEY=DM_KEY,
+
+
+ DM_USER=0x4000,
+
+ DM_KILLSAVESCREEN=DN_FIRST-1,
+ DM_ALLKEYMODE=DN_FIRST-2,
+ DN_ACTIVATEAPP=DM_USER-1,
+};
+
+enum FARCHECKEDSTATE
+{
+ BSTATE_UNCHECKED = 0,
+ BSTATE_CHECKED = 1,
+ BSTATE_3STATE = 2,
+ BSTATE_TOGGLE = 3,
+};
+
+enum FARLISTMOUSEREACTIONTYPE
+{
+ LMRT_ONLYFOCUS = 0,
+ LMRT_ALWAYS = 1,
+ LMRT_NEVER = 2,
+};
+
+enum FARCOMBOBOXEVENTTYPE
+{
+ CBET_KEY = 0x00000001,
+ CBET_MOUSE = 0x00000002,
+};
+
+enum LISTITEMFLAGS
+{
+ LIF_SELECTED = 0x00010000UL,
+ LIF_CHECKED = 0x00020000UL,
+ LIF_SEPARATOR = 0x00040000UL,
+ LIF_DISABLE = 0x00080000UL,
+ LIF_GRAYED = 0x00100000UL,
+ LIF_HIDDEN = 0x00200000UL,
+ LIF_DELETEUSERDATA = 0x80000000UL,
+};
+
+struct FarListItem
+{
+ DWORD Flags;
+ const wchar_t *Text;
+ DWORD Reserved[3];
+};
+
+struct FarListUpdate
+{
+ int Index;
+ struct FarListItem Item;
+};
+
+struct FarListInsert
+{
+ int Index;
+ struct FarListItem Item;
+};
+
+struct FarListGetItem
+{
+ int ItemIndex;
+ struct FarListItem Item;
+};
+
+struct FarListPos
+{
+ int SelectPos;
+ int TopPos;
+};
+
+enum FARLISTFINDFLAGS
+{
+ LIFIND_EXACTMATCH = 0x00000001,
+};
+
+struct FarListFind
+{
+ int StartIndex;
+ const wchar_t *Pattern;
+ DWORD Flags;
+ DWORD Reserved;
+};
+
+struct FarListDelete
+{
+ int StartIndex;
+ int Count;
+};
+
+enum FARLISTINFOFLAGS
+{
+ LINFO_SHOWNOBOX = 0x00000400,
+ LINFO_AUTOHIGHLIGHT = 0x00000800,
+ LINFO_REVERSEHIGHLIGHT = 0x00001000,
+ LINFO_WRAPMODE = 0x00008000,
+ LINFO_SHOWAMPERSAND = 0x00010000,
+};
+
+struct FarListInfo
+{
+ DWORD Flags;
+ int ItemsNumber;
+ int SelectPos;
+ int TopPos;
+ int MaxHeight;
+ int MaxLength;
+ DWORD Reserved[6];
+};
+
+struct FarListItemData
+{
+ int Index;
+ int DataSize;
+ void *Data;
+ DWORD Reserved;
+};
+
+struct FarList
+{
+ int ItemsNumber;
+ struct FarListItem *Items;
+};
+
+struct FarListTitles
+{
+ int TitleLen;
+ const wchar_t *Title;
+ int BottomLen;
+ const wchar_t *Bottom;
+};
+
+struct FarListColors
+{
+ DWORD Flags;
+ DWORD Reserved;
+ int ColorCount;
+ LPBYTE Colors;
+};
+
+struct FarDialogItem
+{
+ int Type;
+ int X1,Y1,X2,Y2;
+ int Focus;
+ union
+ {
+ DWORD_PTR Reserved;
+ int Selected;
+ const wchar_t *History;
+ const wchar_t *Mask;
+ struct FarList *ListItems;
+ int ListPos;
+ CHAR_INFO *VBuf;
+ }
+ Param
+ ;
+ DWORD Flags;
+ int DefaultButton;
+
+ const wchar_t *PtrData;
+ size_t MaxLen; // terminate 0 not included (if == 0 string size is unlimited)
+};
+
+struct FarDialogItemData
+{
+ size_t PtrLength;
+ wchar_t *PtrData;
+};
+
+struct FarDialogEvent
+{
+ HANDLE hDlg;
+ int Msg;
+ int Param1;
+ LONG_PTR Param2;
+ LONG_PTR Result;
+};
+
+struct OpenDlgPluginData
+{
+ int ItemNumber;
+ HANDLE hDlg;
+};
+
+struct DialogInfo
+{
+ int StructSize;
+ GUID Id;
+};
+
+/*
+#define Dlg_RedrawDialog(Info,hDlg) Info.SendDlgMessage(hDlg,DM_REDRAW,0,0)
+
+#define Dlg_GetDlgData(Info,hDlg) Info.SendDlgMessage(hDlg,DM_GETDLGDATA,0,0)
+#define Dlg_SetDlgData(Info,hDlg,Data) Info.SendDlgMessage(hDlg,DM_SETDLGDATA,0,(LONG_PTR)Data)
+
+#define Dlg_GetDlgItemData(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_GETITEMDATA,0,0)
+#define Dlg_SetDlgItemData(Info,hDlg,ID,Data) Info.SendDlgMessage(hDlg,DM_SETITEMDATA,0,(LONG_PTR)Data)
+
+#define DlgItem_GetFocus(Info,hDlg) Info.SendDlgMessage(hDlg,DM_GETFOCUS,0,0)
+#define DlgItem_SetFocus(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_SETFOCUS,ID,0)
+#define DlgItem_Enable(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_ENABLE,ID,TRUE)
+#define DlgItem_Disable(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_ENABLE,ID,FALSE)
+#define DlgItem_IsEnable(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_ENABLE,ID,-1)
+#define DlgItem_SetText(Info,hDlg,ID,Str) Info.SendDlgMessage(hDlg,DM_SETTEXTPTR,ID,(LONG_PTR)Str)
+
+#define DlgItem_GetCheck(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_GETCHECK,ID,0)
+#define DlgItem_SetCheck(Info,hDlg,ID,State) Info.SendDlgMessage(hDlg,DM_SETCHECK,ID,State)
+
+#define DlgEdit_AddHistory(Info,hDlg,ID,Str) Info.SendDlgMessage(hDlg,DM_ADDHISTORY,ID,(LONG_PTR)Str)
+
+#define DlgList_AddString(Info,hDlg,ID,Str) Info.SendDlgMessage(hDlg,DM_LISTADDSTR,ID,(LONG_PTR)Str)
+#define DlgList_GetCurPos(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,ID,0)
+#define DlgList_SetCurPos(Info,hDlg,ID,NewPos) {struct FarListPos LPos={NewPos,-1};Info.SendDlgMessage(hDlg,DM_LISTSETCURPOS,ID,(LONG_PTR)&LPos);}
+#define DlgList_ClearList(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTDELETE,ID,0)
+#define DlgList_DeleteItem(Info,hDlg,ID,Index) {struct FarListDelete FLDItem={Index,1}; Info.SendDlgMessage(hDlg,DM_LISTDELETE,ID,(LONG_PTR)&FLDItem);}
+#define DlgList_SortUp(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTSORT,ID,0)
+#define DlgList_SortDown(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTSORT,ID,1)
+#define DlgList_GetItemData(Info,hDlg,ID,Index) Info.SendDlgMessage(hDlg,DM_LISTGETDATA,ID,Index)
+#define DlgList_SetItemStrAsData(Info,hDlg,ID,Index,Str) {struct FarListItemData FLID{Index,0,Str,0}; Info.SendDlgMessage(hDlg,DM_LISTSETDATA,ID,(LONG_PTR)&FLID);}
+*/
+
+enum FARDIALOGFLAGS
+{
+ FDLG_WARNING = 0x00000001,
+ FDLG_SMALLDIALOG = 0x00000002,
+ FDLG_NODRAWSHADOW = 0x00000004,
+ FDLG_NODRAWPANEL = 0x00000008,
+ FDLG_NONMODAL = 0x00000010,
+ FDLG_KEEPCONSOLETITLE = 0x00000020,
+};
+
+typedef LONG_PTR(*FARWINDOWPROC)(
+ HANDLE hDlg,
+ int Msg,
+ int Param1,
+ LONG_PTR Param2
+);
+
+typedef LONG_PTR(*FARAPISENDDLGMESSAGE)(
+ HANDLE hDlg,
+ int Msg,
+ int Param1,
+ LONG_PTR Param2
+);
+
+typedef LONG_PTR(*FARAPIDEFDLGPROC)(
+ HANDLE hDlg,
+ int Msg,
+ int Param1,
+ LONG_PTR Param2
+);
+
+typedef HANDLE(*FARAPIDIALOGINIT)(
+ INT_PTR PluginNumber,
+ int X1,
+ int Y1,
+ int X2,
+ int Y2,
+ const wchar_t *HelpTopic,
+ struct FarDialogItem *Item,
+ unsigned int ItemsNumber,
+ DWORD Reserved,
+ DWORD Flags,
+ FARWINDOWPROC DlgProc,
+ LONG_PTR Param
+);
+
+typedef int (*FARAPIDIALOGRUN)(
+ HANDLE hDlg
+);
+
+typedef void (*FARAPIDIALOGFREE)(
+ HANDLE hDlg
+);
+
+struct FarMenuItem
+{
+ const wchar_t *Text;
+ int Selected;
+ int Checked;
+ int Separator;
+};
+
+enum MENUITEMFLAGS
+{
+ MIF_NONE = 0,
+ MIF_SELECTED = 0x00010000UL,
+ MIF_CHECKED = 0x00020000UL,
+ MIF_SEPARATOR = 0x00040000UL,
+ MIF_DISABLE = 0x00080000UL,
+ MIF_GRAYED = 0x00100000UL,
+ MIF_HIDDEN = 0x00200000UL,
+ MIF_SUBMENU = 0x00400000UL,
+};
+
+struct FarMenuItemEx
+{
+ DWORD Flags;
+ const wchar_t *Text;
+ DWORD AccelKey;
+ DWORD Reserved;
+ DWORD_PTR UserData;
+};
+
+enum FARMENUFLAGS
+{
+ FMENU_SHOWAMPERSAND = 0x00000001,
+ FMENU_WRAPMODE = 0x00000002,
+ FMENU_AUTOHIGHLIGHT = 0x00000004,
+ FMENU_REVERSEAUTOHIGHLIGHT = 0x00000008,
+ FMENU_SHOWNOBOX = 0x00000010,
+ FMENU_USEEXT = 0x00000020,
+ FMENU_CHANGECONSOLETITLE = 0x00000040,
+};
+
+typedef int (*FARAPIMENU)(
+ INT_PTR PluginNumber,
+ int X,
+ int Y,
+ int MaxHeight,
+ DWORD Flags,
+ const wchar_t *Title,
+ const wchar_t *Bottom,
+ const wchar_t *HelpTopic,
+ const int *BreakKeys,
+ int *BreakCode,
+ const struct FarMenuItem *Item,
+ int ItemsNumber
+);
+
+
+enum PLUGINPANELITEMFLAGS
+{
+ PPIF_PROCESSDESCR = 0x80000000,
+ PPIF_SELECTED = 0x40000000,
+ PPIF_USERDATA = 0x20000000,
+};
+
+struct FAR_FIND_DATA
+{
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ uint64_t nFileSize;
+ uint64_t nPackSize;
+ wchar_t *lpwszFileName;
+};
+
+struct PluginPanelItem
+{
+ struct FAR_FIND_DATA FindData;
+ DWORD Flags;
+ DWORD NumberOfLinks;
+ const wchar_t *Description;
+ const wchar_t *Owner;
+ const wchar_t * const *CustomColumnData;
+ int CustomColumnNumber;
+ DWORD_PTR UserData;
+ DWORD CRC32;
+ DWORD_PTR Reserved[2];
+};
+
+enum PANELINFOFLAGS
+{
+ PFLAGS_SHOWHIDDEN = 0x00000001,
+ PFLAGS_HIGHLIGHT = 0x00000002,
+ PFLAGS_REVERSESORTORDER = 0x00000004,
+ PFLAGS_USESORTGROUPS = 0x00000008,
+ PFLAGS_SELECTEDFIRST = 0x00000010,
+ PFLAGS_REALNAMES = 0x00000020,
+ PFLAGS_NUMERICSORT = 0x00000040,
+ PFLAGS_PANELLEFT = 0x00000080,
+ PFLAGS_DIRECTORIESFIRST = 0x00000100,
+ PFLAGS_USECRC32 = 0x00000200,
+ PFLAGS_CASESENSITIVESORT = 0x00000400,
+};
+
+enum PANELINFOTYPE
+{
+ PTYPE_FILEPANEL,
+ PTYPE_TREEPANEL,
+ PTYPE_QVIEWPANEL,
+ PTYPE_INFOPANEL
+};
+
+struct PanelInfo
+{
+ int PanelType;
+ int Plugin;
+ RECT PanelRect;
+ int ItemsNumber;
+ int SelectedItemsNumber;
+ int CurrentItem;
+ int TopPanelItem;
+ int Visible;
+ int Focus;
+ int ViewMode;
+ int SortMode;
+ DWORD Flags;
+ DWORD Reserved;
+};
+
+
+struct PanelRedrawInfo
+{
+ int CurrentItem;
+ int TopPanelItem;
+};
+
+struct CmdLineSelect
+{
+ int SelStart;
+ int SelEnd;
+};
+
+#define PANEL_NONE -1
+#define PANEL_ACTIVE -1
+#define PANEL_PASSIVE -2
+
+enum FILE_CONTROL_COMMANDS
+{
+ FCTL_CLOSEPLUGIN,
+ FCTL_GETPANELINFO,
+ FCTL_UPDATEPANEL,
+ FCTL_REDRAWPANEL,
+ FCTL_GETCMDLINE,
+ FCTL_SETCMDLINE,
+ FCTL_SETSELECTION,
+ FCTL_SETVIEWMODE,
+ FCTL_INSERTCMDLINE,
+ FCTL_SETUSERSCREEN,
+ FCTL_SETPANELDIR,
+ FCTL_SETCMDLINEPOS,
+ FCTL_GETCMDLINEPOS,
+ FCTL_SETSORTMODE,
+ FCTL_SETSORTORDER,
+ FCTL_GETCMDLINESELECTEDTEXT,
+ FCTL_SETCMDLINESELECTION,
+ FCTL_GETCMDLINESELECTION,
+ FCTL_CHECKPANELSEXIST,
+ FCTL_SETNUMERICSORT,
+ FCTL_GETUSERSCREEN,
+ FCTL_ISACTIVEPANEL,
+ FCTL_GETPANELITEM,
+ FCTL_GETSELECTEDPANELITEM,
+ FCTL_GETCURRENTPANELITEM,
+ FCTL_GETPANELDIR,
+ FCTL_GETCOLUMNTYPES,
+ FCTL_GETCOLUMNWIDTHS,
+ FCTL_BEGINSELECTION,
+ FCTL_ENDSELECTION,
+ FCTL_CLEARSELECTION,
+ FCTL_SETDIRECTORIESFIRST,
+ FCTL_GETPANELFORMAT,
+ FCTL_GETPANELHOSTFILE,
+ FCTL_SETCASESENSITIVESORT,
+};
+
+typedef int (*FARAPICONTROL)(
+ HANDLE hPlugin,
+ int Command,
+ int Param1,
+ LONG_PTR Param2
+);
+
+typedef void (*FARAPITEXT)(
+ int X,
+ int Y,
+ int Color,
+ const wchar_t *Str
+);
+
+typedef HANDLE(*FARAPISAVESCREEN)(int X1, int Y1, int X2, int Y2);
+
+typedef void (*FARAPIRESTORESCREEN)(HANDLE hScreen);
+
+
+typedef int (*FARAPIGETDIRLIST)(
+ const wchar_t *Dir,
+ struct FAR_FIND_DATA **pPanelItem,
+ int *pItemsNumber
+);
+
+typedef int (*FARAPIGETPLUGINDIRLIST)(
+ INT_PTR PluginNumber,
+ HANDLE hPlugin,
+ const wchar_t *Dir,
+ struct PluginPanelItem **pPanelItem,
+ int *pItemsNumber
+);
+
+typedef void (*FARAPIFREEDIRLIST)(struct FAR_FIND_DATA *PanelItem, int nItemsNumber);
+typedef void (*FARAPIFREEPLUGINDIRLIST)(struct PluginPanelItem *PanelItem, int nItemsNumber);
+
+enum VIEWER_FLAGS
+{
+ VF_NONMODAL = 0x00000001,
+ VF_DELETEONCLOSE = 0x00000002,
+ VF_ENABLE_F6 = 0x00000004,
+ VF_DISABLEHISTORY = 0x00000008,
+ VF_IMMEDIATERETURN = 0x00000100,
+ VF_DELETEONLYFILEONCLOSE = 0x00000200,
+};
+
+typedef int (*FARAPIVIEWER)(
+ const wchar_t *FileName,
+ const wchar_t *Title,
+ int X1,
+ int Y1,
+ int X2,
+ int Y2,
+ DWORD Flags,
+ UINT CodePage
+);
+
+enum EDITOR_FLAGS
+{
+ EF_NONMODAL = 0x00000001,
+ EF_CREATENEW = 0x00000002,
+ EF_ENABLE_F6 = 0x00000004,
+ EF_DISABLEHISTORY = 0x00000008,
+ EF_DELETEONCLOSE = 0x00000010,
+ EF_IMMEDIATERETURN = 0x00000100,
+ EF_DELETEONLYFILEONCLOSE = 0x00000200,
+ EF_LOCKED = 0x00000400,
+
+ EF_OPENMODE_MASK = 0xF0000000,
+ EF_OPENMODE_NEWIFOPEN = 0x10000000,
+ EF_OPENMODE_USEEXISTING = 0x20000000,
+ EF_OPENMODE_BREAKIFOPEN = 0x30000000,
+ EF_OPENMODE_RELOADIFOPEN = 0x40000000,
+ EF_SERVICEREGION = 0x00001000,
+};
+
+enum EDITOR_EXITCODE
+{
+ EEC_OPEN_ERROR = 0,
+ EEC_MODIFIED = 1,
+ EEC_NOT_MODIFIED = 2,
+ EEC_LOADING_INTERRUPTED = 3,
+ EEC_OPENED_EXISTING = 4,
+ EEC_ALREADY_EXISTS = 5,
+ EEC_OPEN_NEWINSTANCE = 6,
+ EEC_RELOAD = 7,
+};
+
+typedef int (*FARAPIEDITOR)(
+ const wchar_t *FileName,
+ const wchar_t *Title,
+ int X1,
+ int Y1,
+ int X2,
+ int Y2,
+ DWORD Flags,
+ int StartLine,
+ int StartChar,
+ UINT CodePage
+);
+
+typedef int (*FARAPICMPNAME)(
+ const wchar_t *Pattern,
+ const wchar_t *String,
+ int SkipPath
+);
+
+
+typedef const wchar_t*(*FARAPIGETMSG)(
+ INT_PTR PluginNumber,
+ int MsgId
+);
+
+
+enum FarHelpFlags
+{
+ FHELP_NOSHOWERROR = 0x80000000,
+ FHELP_SELFHELP = 0x00000000,
+ FHELP_FARHELP = 0x00000001,
+ FHELP_CUSTOMFILE = 0x00000002,
+ FHELP_CUSTOMPATH = 0x00000004,
+ FHELP_USECONTENTS = 0x40000000,
+};
+
+typedef BOOL (*FARAPISHOWHELP)(
+ const wchar_t *ModuleName,
+ const wchar_t *Topic,
+ DWORD Flags
+);
+
+enum ADVANCED_CONTROL_COMMANDS
+{
+ ACTL_GETFARVERSION = 0,
+ ACTL_GETSYSWORDDIV = 2,
+ ACTL_WAITKEY = 3,
+ ACTL_GETCOLOR = 4,
+ ACTL_GETARRAYCOLOR = 5,
+ ACTL_EJECTMEDIA = 6,
+ ACTL_KEYMACRO = 7,
+ ACTL_POSTKEYSEQUENCE = 8,
+ ACTL_GETWINDOWINFO = 9,
+ ACTL_GETWINDOWCOUNT = 10,
+ ACTL_SETCURRENTWINDOW = 11,
+ ACTL_COMMIT = 12,
+ ACTL_GETFARHWND = 13,
+ ACTL_GETSYSTEMSETTINGS = 14,
+ ACTL_GETPANELSETTINGS = 15,
+ ACTL_GETINTERFACESETTINGS = 16,
+ ACTL_GETCONFIRMATIONS = 17,
+ ACTL_GETDESCSETTINGS = 18,
+ ACTL_SETARRAYCOLOR = 19,
+ ACTL_GETPLUGINMAXREADDATA = 21,
+ ACTL_GETDIALOGSETTINGS = 22,
+ ACTL_GETSHORTWINDOWINFO = 23,
+ ACTL_REMOVEMEDIA = 24,
+ ACTL_GETMEDIATYPE = 25,
+ ACTL_GETPOLICIES = 26,
+ ACTL_REDRAWALL = 27,
+ ACTL_SYNCHRO = 28,
+ ACTL_SETPROGRESSSTATE = 29,
+ ACTL_SETPROGRESSVALUE = 30,
+ ACTL_QUIT = 31,
+ ACTL_GETFARRECT = 32,
+ ACTL_GETCURSORPOS = 33,
+ ACTL_SETCURSORPOS = 34,
+ ACTL_PROGRESSNOTIFY = 35,
+};
+
+enum FarPoliciesFlags
+{
+ FFPOL_MAINMENUSYSTEM = 0x00000001,
+ FFPOL_MAINMENUPANEL = 0x00000002,
+ FFPOL_MAINMENUINTERFACE = 0x00000004,
+ FFPOL_MAINMENULANGUAGE = 0x00000008,
+ FFPOL_MAINMENUPLUGINS = 0x00000010,
+ FFPOL_MAINMENUDIALOGS = 0x00000020,
+ FFPOL_MAINMENUCONFIRMATIONS = 0x00000040,
+ FFPOL_MAINMENUPANELMODE = 0x00000080,
+ FFPOL_MAINMENUFILEDESCR = 0x00000100,
+ FFPOL_MAINMENUFOLDERDESCR = 0x00000200,
+ FFPOL_MAINMENUVIEWER = 0x00000800,
+ FFPOL_MAINMENUEDITOR = 0x00001000,
+ FFPOL_MAINMENUCOLORS = 0x00004000,
+ FFPOL_MAINMENUHILIGHT = 0x00008000,
+ FFPOL_MAINMENUSAVEPARAMS = 0x00020000,
+
+ FFPOL_CREATEMACRO = 0x00040000,
+ FFPOL_USEPSWITCH = 0x00080000,
+ FFPOL_PERSONALPATH = 0x00100000,
+ FFPOL_KILLTASK = 0x00200000,
+ FFPOL_SHOWHIDDENDRIVES = 0x80000000,
+};
+
+enum FarSystemSettings
+{
+ FSS_DELETETORECYCLEBIN = 0x00000002,
+ FSS_WRITETHROUGH = 0x00000004,
+ FSS_RESERVED = 0x00000008,
+ FSS_SAVECOMMANDSHISTORY = 0x00000020,
+ FSS_SAVEFOLDERSHISTORY = 0x00000040,
+ FSS_SAVEVIEWANDEDITHISTORY = 0x00000080,
+ FSS_USEWINDOWSREGISTEREDTYPES = 0x00000100,
+ FSS_AUTOSAVESETUP = 0x00000200,
+ FSS_SCANSYMLINK = 0x00000400,
+};
+
+enum FarPanelSettings
+{
+ FPS_SHOWHIDDENANDSYSTEMFILES = 0x00000001,
+ FPS_HIGHLIGHTFILES = 0x00000002,
+ FPS_AUTOCHANGEFOLDER = 0x00000004,
+ FPS_SELECTFOLDERS = 0x00000008,
+ FPS_ALLOWREVERSESORTMODES = 0x00000010,
+ FPS_SHOWCOLUMNTITLES = 0x00000020,
+ FPS_SHOWSTATUSLINE = 0x00000040,
+ FPS_SHOWFILESTOTALINFORMATION = 0x00000080,
+ FPS_SHOWFREESIZE = 0x00000100,
+ FPS_SHOWSCROLLBAR = 0x00000200,
+ FPS_SHOWBACKGROUNDSCREENSNUMBER = 0x00000400,
+ FPS_SHOWSORTMODELETTER = 0x00000800,
+};
+
+enum FarDialogSettings
+{
+ FDIS_HISTORYINDIALOGEDITCONTROLS = 0x00000001,
+ FDIS_PERSISTENTBLOCKSINEDITCONTROLS = 0x00000002,
+ FDIS_AUTOCOMPLETEININPUTLINES = 0x00000004,
+ FDIS_BSDELETEUNCHANGEDTEXT = 0x00000008,
+ FDIS_DELREMOVESBLOCKS = 0x00000010,
+ FDIS_MOUSECLICKOUTSIDECLOSESDIALOG = 0x00000020,
+};
+
+enum FarInterfaceSettings
+{
+ FIS_CLOCKINPANELS = 0x00000001,
+ FIS_CLOCKINVIEWERANDEDITOR = 0x00000002,
+ FIS_MOUSE = 0x00000004,
+ FIS_SHOWKEYBAR = 0x00000008,
+ FIS_ALWAYSSHOWMENUBAR = 0x00000010,
+ FIS_SHOWTOTALCOPYPROGRESSINDICATOR = 0x00000100,
+ FIS_SHOWCOPYINGTIMEINFO = 0x00000200,
+ FIS_USECTRLPGUPTOCHANGEDRIVE = 0x00000800,
+ FIS_SHOWTOTALDELPROGRESSINDICATOR = 0x00001000,
+};
+
+enum FarConfirmationsSettings
+{
+ FCS_COPYOVERWRITE = 0x00000001,
+ FCS_MOVEOVERWRITE = 0x00000002,
+ FCS_DRAGANDDROP = 0x00000004,
+ FCS_DELETE = 0x00000008,
+ FCS_DELETENONEMPTYFOLDERS = 0x00000010,
+ FCS_INTERRUPTOPERATION = 0x00000020,
+ FCS_DISCONNECTNETWORKDRIVE = 0x00000040,
+ FCS_RELOADEDITEDFILE = 0x00000080,
+ FCS_CLEARHISTORYLIST = 0x00000100,
+ FCS_EXIT = 0x00000200,
+ FCS_OVERWRITEDELETEROFILES = 0x00000400,
+};
+
+enum FarDescriptionSettings
+{
+ FDS_UPDATEALWAYS = 0x00000001,
+ FDS_UPDATEIFDISPLAYED = 0x00000002,
+ FDS_SETHIDDEN = 0x00000004,
+ FDS_UPDATEREADONLY = 0x00000008,
+};
+
+enum FAREJECTMEDIAFLAGS
+{
+ EJECT_NO_MESSAGE = 0x00000001,
+ EJECT_LOAD_MEDIA = 0x00000002,
+ EJECT_NOTIFY_AFTERREMOVE = 0x00000004,
+ EJECT_READY = 0x80000000,
+};
+
+struct ActlEjectMedia
+{
+ DWORD Letter;
+ DWORD Flags;
+};
+
+enum FARMEDIATYPE
+{
+ FMT_DRIVE_ERROR = -1,
+ FMT_DRIVE_UNKNOWN = DRIVE_UNKNOWN,
+ FMT_DRIVE_NO_ROOT_DIR = DRIVE_NO_ROOT_DIR,
+ FMT_DRIVE_REMOVABLE = DRIVE_REMOVABLE,
+ FMT_DRIVE_FIXED = DRIVE_FIXED,
+ FMT_DRIVE_REMOTE = DRIVE_REMOTE,
+ FMT_DRIVE_CDROM = DRIVE_CDROM,
+ FMT_DRIVE_RAMDISK = DRIVE_RAMDISK,
+ FMT_DRIVE_SUBSTITUTE = 15,
+ FMT_DRIVE_REMOTE_NOT_CONNECTED = 16,
+ FMT_DRIVE_CD_RW = 18,
+ FMT_DRIVE_CD_RWDVD = 19,
+ FMT_DRIVE_DVD_ROM = 20,
+ FMT_DRIVE_DVD_RW = 21,
+ FMT_DRIVE_DVD_RAM = 22,
+ FMT_DRIVE_USBDRIVE = 40,
+ FMT_DRIVE_NOT_INIT = 255,
+};
+
+enum FARMEDIATYPEFLAGS
+{
+ MEDIATYPE_NODETECTCDROM = 0x80000000,
+};
+
+struct ActlMediaType
+{
+ DWORD Letter;
+ DWORD Flags;
+ DWORD Reserved[2];
+};
+
+enum FARKEYSEQUENCEFLAGS
+{
+ KSFLAGS_DISABLEOUTPUT = 0x00000001,
+ KSFLAGS_NOSENDKEYSTOPLUGINS = 0x00000002,
+ KSFLAGS_REG_MULTI_SZ = 0x00100000,
+ KSFLAGS_SILENTCHECK = 0x00000001,
+};
+
+struct KeySequence
+{
+ DWORD Flags;
+ int Count;
+ const DWORD *Sequence;
+};
+
+enum FARMACROCOMMAND
+{
+ MCMD_LOADALL = 0,
+ MCMD_SAVEALL = 1,
+ MCMD_POSTMACROSTRING = 2,
+ MCMD_COMPILEMACRO = 3,
+ MCMD_CHECKMACRO = 4,
+ MCMD_GETSTATE = 5,
+ MCMD_GETAREA = 6,
+ MCMD_RUNMACROSTRING = 7,
+};
+
+enum FARMACROAREA
+{
+ MACROAREA_OTHER = 0,
+ MACROAREA_SHELL = 1,
+ MACROAREA_VIEWER = 2,
+ MACROAREA_EDITOR = 3,
+ MACROAREA_DIALOG = 4,
+ MACROAREA_SEARCH = 5,
+ MACROAREA_DISKS = 6,
+ MACROAREA_MAINMENU = 7,
+ MACROAREA_MENU = 8,
+ MACROAREA_HELP = 9,
+ MACROAREA_INFOPANEL =10,
+ MACROAREA_QVIEWPANEL =11,
+ MACROAREA_TREEPANEL =12,
+ MACROAREA_FINDFOLDER =13,
+ MACROAREA_USERMENU =14,
+ MACROAREA_AUTOCOMPLETION =15,
+};
+
+enum FARMACROSTATE
+{
+ MACROSTATE_NOMACRO = 0,
+ MACROSTATE_EXECUTING = 1,
+ MACROSTATE_EXECUTING_COMMON = 2,
+ MACROSTATE_RECORDING = 3,
+ MACROSTATE_RECORDING_COMMON = 4,
+};
+
+enum FARMACROPARSEERRORCODE
+{
+ MPEC_SUCCESS = 0,
+ MPEC_UNRECOGNIZED_KEYWORD = 1,
+ MPEC_UNRECOGNIZED_FUNCTION = 2,
+ MPEC_FUNC_PARAM = 3,
+ MPEC_NOT_EXPECTED_ELSE = 4,
+ MPEC_NOT_EXPECTED_END = 5,
+ MPEC_UNEXPECTED_EOS = 6,
+ MPEC_EXPECTED_TOKEN = 7,
+ MPEC_BAD_HEX_CONTROL_CHAR = 8,
+ MPEC_BAD_CONTROL_CHAR = 9,
+ MPEC_VAR_EXPECTED =10,
+ MPEC_EXPR_EXPECTED =11,
+ MPEC_ZEROLENGTHMACRO =12,
+ MPEC_INTPARSERERROR =13,
+ MPEC_CONTINUE_OTL =14,
+};
+
+struct MacroParseResult
+{
+ DWORD ErrCode;
+ COORD ErrPos;
+ const wchar_t *ErrSrc;
+};
+
+struct ActlKeyMacro
+{
+ int Command;
+ union
+ {
+ struct
+ {
+ const wchar_t *SequenceText;
+ DWORD Flags;
+ DWORD AKey;
+ } PlainText;
+ struct KeySequence Compile;
+ struct MacroParseResult MacroResult;
+ DWORD_PTR Reserved[3];
+ } Param;
+};
+
+enum FARMACROVARTYPE
+{
+ FMVT_INTEGER = 0,
+ FMVT_STRING = 1,
+ FMVT_DOUBLE = 2,
+};
+
+struct FarMacroValue
+{
+ enum FARMACROVARTYPE type;
+ union
+ {
+ int64_t i;
+ double d;
+ const wchar_t *s;
+ } v;
+};
+
+struct FarMacroFunction
+{
+ DWORD Flags;
+ const wchar_t *Name;
+ int nParam;
+ int oParam;
+ const wchar_t *Syntax;
+ const wchar_t *Description;
+};
+
+enum FARCOLORFLAGS
+{
+ FCLR_REDRAW = 0x00000001,
+};
+
+struct FarSetColors
+{
+ DWORD Flags;
+ int StartIndex;
+ int ColorCount;
+ LPBYTE Colors;
+};
+
+enum WINDOWINFO_TYPE
+{
+ WTYPE_VIRTUAL,
+ // ПРОСЬБА НЕ ЗАБЫВАТЬ СИНХРОНИЗИРОВАТЬ ИЗМЕНЕНИЯ
+ // WTYPE_* и MODALTYPE_* (frame.hpp)!!!
+ // (и не надо убирать этот комментарий, пока ситуация не изменится ;)
+ WTYPE_PANELS=1,
+ WTYPE_VIEWER,
+ WTYPE_EDITOR,
+ WTYPE_DIALOG,
+ WTYPE_VMENU,
+ WTYPE_HELP,
+ WTYPE_COMBOBOX,
+ WTYPE_FINDFOLDER,
+ WTYPE_USER,
+};
+
+struct WindowInfo
+{
+ int Pos;
+ int Type;
+ int Modified;
+ int Current;
+ wchar_t *TypeName;
+ int TypeNameSize;
+ wchar_t *Name;
+ int NameSize;
+};
+
+enum PROGRESSTATE
+{
+ PGS_NOPROGRESS =0x0,
+ PGS_INDETERMINATE=0x1,
+ PGS_NORMAL =0x2,
+ PGS_ERROR =0x4,
+ PGS_PAUSED =0x8,
+};
+
+struct PROGRESSVALUE
+{
+ uint64_t Completed;
+ uint64_t Total;
+};
+
+typedef INT_PTR(*FARAPIADVCONTROL)(
+ INT_PTR ModuleNumber,
+ int Command,
+ void *Param
+);
+
+
+enum VIEWER_CONTROL_COMMANDS
+{
+ VCTL_GETINFO,
+ VCTL_QUIT,
+ VCTL_REDRAW,
+ VCTL_SETKEYBAR,
+ VCTL_SETPOSITION,
+ VCTL_SELECT,
+ VCTL_SETMODE,
+};
+
+enum VIEWER_OPTIONS
+{
+ VOPT_SAVEFILEPOSITION=1,
+ VOPT_AUTODETECTCODEPAGE=2,
+};
+
+enum VIEWER_SETMODE_TYPES
+{
+ VSMT_HEX,
+ VSMT_WRAP,
+ VSMT_WORDWRAP,
+};
+
+enum VIEWER_SETMODEFLAGS_TYPES
+{
+ VSMFL_REDRAW = 0x00000001,
+};
+
+struct ViewerSetMode
+{
+ int Type;
+ union
+ {
+ int iParam;
+ wchar_t *wszParam;
+ } Param;
+ DWORD Flags;
+ DWORD Reserved;
+};
+
+struct ViewerSelect
+{
+ int64_t BlockStartPos;
+ int BlockLen;
+};
+
+enum VIEWER_SETPOS_FLAGS
+{
+ VSP_NOREDRAW = 0x0001,
+ VSP_PERCENT = 0x0002,
+ VSP_RELATIVE = 0x0004,
+ VSP_NORETNEWPOS = 0x0008,
+};
+
+struct ViewerSetPosition
+{
+ DWORD Flags;
+ int64_t StartPos;
+ int64_t LeftPos;
+};
+
+struct ViewerMode
+{
+ UINT CodePage;
+ int Wrap;
+ int WordWrap;
+ int Hex;
+ DWORD Reserved[4];
+};
+
+struct ViewerInfo
+{
+ int StructSize;
+ int ViewerID;
+ const wchar_t *FileName;
+ int64_t FileSize;
+ int64_t FilePos;
+ int WindowSizeX;
+ int WindowSizeY;
+ DWORD Options;
+ int TabSize;
+ struct ViewerMode CurMode;
+ int64_t LeftPos;
+};
+
+typedef int (*FARAPIVIEWERCONTROL)(
+ int Command,
+ void *Param
+);
+
+enum VIEWER_EVENTS
+{
+ VE_READ =0,
+ VE_CLOSE =1,
+
+ VE_GOTFOCUS =6,
+ VE_KILLFOCUS =7,
+};
+
+
+enum EDITOR_EVENTS
+{
+ EE_READ =0,
+ EE_SAVE =1,
+ EE_REDRAW =2,
+ EE_CLOSE =3,
+
+ EE_GOTFOCUS =6,
+ EE_KILLFOCUS =7,
+};
+
+enum DIALOG_EVENTS
+{
+ DE_DLGPROCINIT =0,
+ DE_DEFDLGPROCINIT =1,
+ DE_DLGPROCEND =2,
+};
+
+enum SYNCHRO_EVENTS
+{
+ SE_COMMONSYNCHRO =0,
+};
+
+#define EEREDRAW_ALL 0
+#define EEREDRAW_CHANGE 1
+#define EEREDRAW_LINE 2
+
+enum EDITOR_CONTROL_COMMANDS
+{
+ ECTL_GETSTRING,
+ ECTL_SETSTRING,
+ ECTL_INSERTSTRING,
+ ECTL_DELETESTRING,
+ ECTL_DELETECHAR,
+ ECTL_INSERTTEXT,
+ ECTL_GETINFO,
+ ECTL_SETPOSITION,
+ ECTL_SELECT,
+ ECTL_REDRAW,
+ ECTL_TABTOREAL,
+ ECTL_REALTOTAB,
+ ECTL_EXPANDTABS,
+ ECTL_SETTITLE,
+ ECTL_READINPUT,
+ ECTL_PROCESSINPUT,
+ ECTL_ADDCOLOR,
+ ECTL_GETCOLOR,
+ ECTL_SAVEFILE,
+ ECTL_QUIT,
+ ECTL_SETKEYBAR,
+ ECTL_PROCESSKEY,
+ ECTL_SETPARAM,
+ ECTL_GETBOOKMARKS,
+ ECTL_TURNOFFMARKINGBLOCK,
+ ECTL_DELETEBLOCK,
+ ECTL_ADDSTACKBOOKMARK,
+ ECTL_PREVSTACKBOOKMARK,
+ ECTL_NEXTSTACKBOOKMARK,
+ ECTL_CLEARSTACKBOOKMARKS,
+ ECTL_DELETESTACKBOOKMARK,
+ ECTL_GETSTACKBOOKMARKS,
+ ECTL_UNDOREDO,
+ ECTL_GETFILENAME,
+ ECTL_SERVICEREGION,
+};
+
+enum EDITOR_SETPARAMETER_TYPES
+{
+ ESPT_TABSIZE,
+ ESPT_EXPANDTABS,
+ ESPT_AUTOINDENT,
+ ESPT_CURSORBEYONDEOL,
+ ESPT_CHARCODEBASE,
+ ESPT_CODEPAGE,
+ ESPT_SAVEFILEPOSITION,
+ ESPT_LOCKMODE,
+ ESPT_SETWORDDIV,
+ ESPT_GETWORDDIV,
+ ESPT_SHOWWHITESPACE,
+ ESPT_SETBOM,
+};
+
+struct EditorServiceRegion
+{
+ int Command;
+ DWORD Flags;
+};
+
+
+struct EditorSetParameter
+{
+ int Type;
+ union
+ {
+ int iParam;
+ wchar_t *wszParam;
+ DWORD Reserved1;
+ } Param;
+ DWORD Flags;
+ DWORD Size;
+};
+
+
+enum EDITOR_UNDOREDO_COMMANDS
+{
+ EUR_BEGIN,
+ EUR_END,
+ EUR_UNDO,
+ EUR_REDO
+};
+
+
+struct EditorUndoRedo
+{
+ int Command;
+ DWORD_PTR Reserved[3];
+};
+
+struct EditorGetString
+{
+ int StringNumber;
+ wchar_t *StringText;
+ wchar_t *StringEOL;
+ int StringLength;
+ int SelStart;
+ int SelEnd;
+};
+
+
+struct EditorSetString
+{
+ int StringNumber;
+ const wchar_t *StringText;
+ const wchar_t *StringEOL;
+ int StringLength;
+};
+
+enum EXPAND_TABS
+{
+ EXPAND_NOTABS,
+ EXPAND_ALLTABS,
+ EXPAND_NEWTABS
+};
+
+
+enum EDITOR_OPTIONS
+{
+ EOPT_EXPANDALLTABS = 0x00000001,
+ EOPT_PERSISTENTBLOCKS = 0x00000002,
+ EOPT_DELREMOVESBLOCKS = 0x00000004,
+ EOPT_AUTOINDENT = 0x00000008,
+ EOPT_SAVEFILEPOSITION = 0x00000010,
+ EOPT_AUTODETECTCODEPAGE= 0x00000020,
+ EOPT_CURSORBEYONDEOL = 0x00000040,
+ EOPT_EXPANDONLYNEWTABS = 0x00000080,
+ EOPT_SHOWWHITESPACE = 0x00000100,
+ EOPT_BOM = 0x00000200,
+};
+
+
+enum EDITOR_BLOCK_TYPES
+{
+ BTYPE_NONE,
+ BTYPE_STREAM,
+ BTYPE_COLUMN
+};
+
+enum EDITOR_CURRENTSTATE
+{
+ ECSTATE_MODIFIED = 0x00000001,
+ ECSTATE_SAVED = 0x00000002,
+ ECSTATE_LOCKED = 0x00000004,
+};
+
+
+struct EditorInfo
+{
+ int EditorID;
+ int WindowSizeX;
+ int WindowSizeY;
+ int TotalLines;
+ int CurLine;
+ int CurPos;
+ int CurTabPos;
+ int TopScreenLine;
+ int LeftPos;
+ int Overtype;
+ int BlockType;
+ int BlockStartLine;
+ DWORD Options;
+ int TabSize;
+ int BookMarkCount;
+ DWORD CurState;
+ UINT CodePage;
+ DWORD Reserved[5];
+};
+
+struct EditorBookMarks
+{
+ long *Line;
+ long *Cursor;
+ long *ScreenLine;
+ long *LeftPos;
+ DWORD Reserved[4];
+};
+
+struct EditorSetPosition
+{
+ int CurLine;
+ int CurPos;
+ int CurTabPos;
+ int TopScreenLine;
+ int LeftPos;
+ int Overtype;
+};
+
+
+struct EditorSelect
+{
+ int BlockType;
+ int BlockStartLine;
+ int BlockStartPos;
+ int BlockWidth;
+ int BlockHeight;
+};
+
+
+struct EditorConvertPos
+{
+ int StringNumber;
+ int SrcPos;
+ int DestPos;
+};
+
+
+enum EDITORCOLORFLAGS
+{
+ ECF_TAB1 = 0x10000,
+};
+
+struct EditorColor
+{
+ int StringNumber;
+ int ColorItem;
+ int StartPos;
+ int EndPos;
+ int Color;
+};
+
+struct EditorSaveFile
+{
+ const wchar_t *FileName;
+ const wchar_t *FileEOL;
+ UINT CodePage;
+};
+
+typedef int (*FARAPIEDITORCONTROL)(
+ int Command,
+ void *Param
+);
+
+enum INPUTBOXFLAGS
+{
+ FIB_ENABLEEMPTY = 0x00000001,
+ FIB_PASSWORD = 0x00000002,
+ FIB_EXPANDENV = 0x00000004,
+ FIB_NOUSELASTHISTORY = 0x00000008,
+ FIB_BUTTONS = 0x00000010,
+ FIB_NOAMPERSAND = 0x00000020,
+ FIB_CHECKBOX = 0x00010000,
+ FIB_EDITPATH = 0x01000000,
+};
+
+typedef int (*FARAPIINPUTBOX)(
+ const wchar_t *Title,
+ const wchar_t *SubTitle,
+ const wchar_t *HistoryName,
+ const wchar_t *SrcText,
+ wchar_t *DestText,
+ int DestLength,
+ const wchar_t *HelpTopic,
+ DWORD Flags
+);
+
+typedef int (*FARAPIPLUGINSCONTROL)(
+ HANDLE hHandle,
+ int Command,
+ int Param1,
+ LONG_PTR Param2
+);
+
+typedef int (*FARAPIFILEFILTERCONTROL)(
+ HANDLE hHandle,
+ int Command,
+ int Param1,
+ LONG_PTR Param2
+);
+
+typedef int (*FARAPIREGEXPCONTROL)(
+ HANDLE hHandle,
+ int Command,
+ LONG_PTR Param
+);
+
+// <C&C++>
+typedef int (*FARSTDSPRINTF)(wchar_t *Buffer,const wchar_t *Format,...);
+typedef int (*FARSTDSNPRINTF)(wchar_t *Buffer,size_t Sizebuf,const wchar_t *Format,...);
+typedef int (*FARSTDSSCANF)(const wchar_t *Buffer, const wchar_t *Format,...);
+// </C&C++>
+typedef void (*FARSTDQSORT)(void *base, size_t nelem, size_t width, int (__cdecl *fcmp)(const void *, const void *));
+typedef void (*FARSTDQSORTEX)(void *base, size_t nelem, size_t width, int (__cdecl *fcmp)(const void *, const void *,void *userparam),void *userparam);
+typedef void *(*FARSTDBSEARCH)(const void *key, const void *base, size_t nelem, size_t width, int (__cdecl *fcmp)(const void *, const void *));
+typedef int (*FARSTDGETFILEOWNER)(const wchar_t *Computer,const wchar_t *Name,wchar_t *Owner,int Size);
+typedef int (*FARSTDGETNUMBEROFLINKS)(const wchar_t *Name);
+typedef int (*FARSTDATOI)(const wchar_t *s);
+typedef int64_t (*FARSTDATOI64)(const wchar_t *s);
+typedef wchar_t *(*FARSTDITOA64)(int64_t value, wchar_t *string, int radix);
+typedef wchar_t *(*FARSTDITOA)(int value, wchar_t *string, int radix);
+typedef wchar_t *(*FARSTDLTRIM)(wchar_t *Str);
+typedef wchar_t *(*FARSTDRTRIM)(wchar_t *Str);
+typedef wchar_t *(*FARSTDTRIM)(wchar_t *Str);
+typedef wchar_t *(*FARSTDTRUNCSTR)(wchar_t *Str,int MaxLength);
+typedef wchar_t *(*FARSTDTRUNCPATHSTR)(wchar_t *Str,int MaxLength);
+typedef wchar_t *(*FARSTDQUOTESPACEONLY)(wchar_t *Str);
+typedef const wchar_t*(*FARSTDPOINTTONAME)(const wchar_t *Path);
+typedef int (*FARSTDGETPATHROOT)(const wchar_t *Path,wchar_t *Root, int DestSize);
+typedef BOOL (*FARSTDADDENDSLASH)(wchar_t *Path);
+typedef int (*FARSTDCOPYTOCLIPBOARD)(const wchar_t *Data);
+typedef wchar_t *(*FARSTDPASTEFROMCLIPBOARD)(void);
+typedef int (*FARSTDINPUTRECORDTOKEY)(const INPUT_RECORD *r);
+typedef int (*FARSTDLOCALISLOWER)(wchar_t Ch);
+typedef int (*FARSTDLOCALISUPPER)(wchar_t Ch);
+typedef int (*FARSTDLOCALISALPHA)(wchar_t Ch);
+typedef int (*FARSTDLOCALISALPHANUM)(wchar_t Ch);
+typedef wchar_t (*FARSTDLOCALUPPER)(wchar_t LowerChar);
+typedef wchar_t (*FARSTDLOCALLOWER)(wchar_t UpperChar);
+typedef void (*FARSTDLOCALUPPERBUF)(wchar_t *Buf,int Length);
+typedef void (*FARSTDLOCALLOWERBUF)(wchar_t *Buf,int Length);
+typedef void (*FARSTDLOCALSTRUPR)(wchar_t *s1);
+typedef void (*FARSTDLOCALSTRLWR)(wchar_t *s1);
+typedef int (*FARSTDLOCALSTRICMP)(const wchar_t *s1,const wchar_t *s2);
+typedef int (*FARSTDLOCALSTRNICMP)(const wchar_t *s1,const wchar_t *s2,int n);
+
+enum PROCESSNAME_FLAGS
+{
+ PN_CMPNAME = 0x00000000UL,
+ PN_CMPNAMELIST = 0x00010000UL,
+ PN_GENERATENAME = 0x00020000UL,
+ PN_SKIPPATH = 0x01000000UL,
+};
+
+typedef int (*FARSTDPROCESSNAME)(const wchar_t *param1, wchar_t *param2, DWORD size, DWORD flags);
+
+typedef void (*FARSTDUNQUOTE)(wchar_t *Str);
+
+enum XLATMODE
+{
+ XLAT_SWITCHKEYBLAYOUT = 0x00000001UL,
+ XLAT_SWITCHKEYBBEEP = 0x00000002UL,
+ XLAT_USEKEYBLAYOUTNAME = 0x00000004UL,
+ XLAT_CONVERTALLCMDLINE = 0x00010000UL,
+};
+
+typedef size_t (*FARSTDKEYTOKEYNAME)(int Key,wchar_t *KeyText,size_t Size);
+
+typedef wchar_t*(*FARSTDXLAT)(wchar_t *Line,int StartPos,int EndPos,DWORD Flags);
+
+typedef int (*FARSTDKEYNAMETOKEY)(const wchar_t *Name);
+
+typedef int (*FRSUSERFUNC)(
+ const struct FAR_FIND_DATA *FData,
+ const wchar_t *FullName,
+ void *Param
+);
+
+enum FRSMODE
+{
+ FRS_RETUPDIR = 0x01,
+ FRS_RECUR = 0x02,
+ FRS_SCANSYMLINK = 0x04,
+};
+
+typedef void (*FARSTDRECURSIVESEARCH)(const wchar_t *InitDir,const wchar_t *Mask,FRSUSERFUNC Func,DWORD Flags,void *Param);
+typedef int (*FARSTDMKTEMP)(wchar_t *Dest, DWORD size, const wchar_t *Prefix);
+typedef void (*FARSTDDELETEBUFFER)(void *Buffer);
+
+enum MKLINKOP
+{
+ FLINK_HARDLINK = 1,
+ FLINK_JUNCTION = 2,
+ FLINK_VOLMOUNT = 3,
+ FLINK_SYMLINKFILE = 4,
+ FLINK_SYMLINKDIR = 5,
+ FLINK_SYMLINK = 6,
+
+ FLINK_SHOWERRMSG = 0x10000,
+ FLINK_DONOTUPDATEPANEL = 0x20000,
+};
+typedef int (*FARSTDMKLINK)(const wchar_t *Src,const wchar_t *Dest,DWORD Flags);
+typedef int (*FARGETREPARSEPOINTINFO)(const wchar_t *Src, wchar_t *Dest,int DestSize);
+
+enum CONVERTPATHMODES
+{
+ CPM_FULL,
+ CPM_REAL,
+ CPM_NATIVE,
+};
+
+typedef int (*FARCONVERTPATH)(enum CONVERTPATHMODES Mode, const wchar_t *Src, wchar_t *Dest, int DestSize);
+
+typedef DWORD (*FARGETCURRENTDIRECTORY)(DWORD Size,wchar_t* Buffer);
+
+typedef struct FarStandardFunctions
+{
+ int StructSize;
+
+ FARSTDATOI atoi;
+ FARSTDATOI64 atoi64;
+ FARSTDITOA itoa;
+ FARSTDITOA64 itoa64;
+ // <C&C++>
+ FARSTDSPRINTF sprintf;
+ FARSTDSSCANF sscanf;
+ // </C&C++>
+ FARSTDQSORT qsort;
+ FARSTDBSEARCH bsearch;
+ FARSTDQSORTEX qsortex;
+ // <C&C++>
+ FARSTDSNPRINTF snprintf;
+ // </C&C++>
+
+ DWORD_PTR Reserved[8];
+
+ FARSTDLOCALISLOWER LIsLower;
+ FARSTDLOCALISUPPER LIsUpper;
+ FARSTDLOCALISALPHA LIsAlpha;
+ FARSTDLOCALISALPHANUM LIsAlphanum;
+ FARSTDLOCALUPPER LUpper;
+ FARSTDLOCALLOWER LLower;
+ FARSTDLOCALUPPERBUF LUpperBuf;
+ FARSTDLOCALLOWERBUF LLowerBuf;
+ FARSTDLOCALSTRUPR LStrupr;
+ FARSTDLOCALSTRLWR LStrlwr;
+ FARSTDLOCALSTRICMP LStricmp;
+ FARSTDLOCALSTRNICMP LStrnicmp;
+
+ FARSTDUNQUOTE Unquote;
+ FARSTDLTRIM LTrim;
+ FARSTDRTRIM RTrim;
+ FARSTDTRIM Trim;
+ FARSTDTRUNCSTR TruncStr;
+ FARSTDTRUNCPATHSTR TruncPathStr;
+ FARSTDQUOTESPACEONLY QuoteSpaceOnly;
+ FARSTDPOINTTONAME PointToName;
+ FARSTDGETPATHROOT GetPathRoot;
+ FARSTDADDENDSLASH AddEndSlash;
+ FARSTDCOPYTOCLIPBOARD CopyToClipboard;
+ FARSTDPASTEFROMCLIPBOARD PasteFromClipboard;
+ FARSTDKEYTOKEYNAME FarKeyToName;
+ FARSTDKEYNAMETOKEY FarNameToKey;
+ FARSTDINPUTRECORDTOKEY FarInputRecordToKey;
+ FARSTDXLAT XLat;
+ FARSTDGETFILEOWNER GetFileOwner;
+ FARSTDGETNUMBEROFLINKS GetNumberOfLinks;
+ FARSTDRECURSIVESEARCH FarRecursiveSearch;
+ FARSTDMKTEMP MkTemp;
+ FARSTDDELETEBUFFER DeleteBuffer;
+ FARSTDPROCESSNAME ProcessName;
+ FARSTDMKLINK MkLink;
+ FARCONVERTPATH ConvertPath;
+ FARGETREPARSEPOINTINFO GetReparsePointInfo;
+ FARGETCURRENTDIRECTORY GetCurrentDirectory;
+} FARSTANDARDFUNCTIONS;
+
+struct PluginStartupInfo
+{
+ int StructSize;
+ const wchar_t *ModuleName;
+ INT_PTR ModuleNumber;
+ const wchar_t *RootKey;
+ FARAPIMENU Menu;
+ FARAPIMESSAGE Message;
+ FARAPIGETMSG GetMsg;
+ FARAPICONTROL Control;
+ FARAPISAVESCREEN SaveScreen;
+ FARAPIRESTORESCREEN RestoreScreen;
+ FARAPIGETDIRLIST GetDirList;
+ FARAPIGETPLUGINDIRLIST GetPluginDirList;
+ FARAPIFREEDIRLIST FreeDirList;
+ FARAPIFREEPLUGINDIRLIST FreePluginDirList;
+ FARAPIVIEWER Viewer;
+ FARAPIEDITOR Editor;
+ FARAPICMPNAME CmpName;
+ FARAPITEXT Text;
+ FARAPIEDITORCONTROL EditorControl;
+
+ FARSTANDARDFUNCTIONS *FSF;
+
+ FARAPISHOWHELP ShowHelp;
+ FARAPIADVCONTROL AdvControl;
+ FARAPIINPUTBOX InputBox;
+ FARAPIDIALOGINIT DialogInit;
+ FARAPIDIALOGRUN DialogRun;
+ FARAPIDIALOGFREE DialogFree;
+
+ FARAPISENDDLGMESSAGE SendDlgMessage;
+ FARAPIDEFDLGPROC DefDlgProc;
+ DWORD_PTR Reserved;
+ FARAPIVIEWERCONTROL ViewerControl;
+ FARAPIPLUGINSCONTROL PluginsControl;
+ FARAPIFILEFILTERCONTROL FileFilterControl;
+ FARAPIREGEXPCONTROL RegExpControl;
+};
+
+
+enum PLUGIN_FLAGS
+{
+ PF_PRELOAD = 0x0001,
+ PF_DISABLEPANELS = 0x0002,
+ PF_EDITOR = 0x0004,
+ PF_VIEWER = 0x0008,
+ PF_FULLCMDLINE = 0x0010,
+ PF_DIALOG = 0x0020,
+};
+
+struct PluginInfo
+{
+ int StructSize;
+ DWORD Flags;
+ const wchar_t * const *DiskMenuStrings;
+ int *Reserved0;
+ int DiskMenuStringsNumber;
+ const wchar_t * const *PluginMenuStrings;
+ int PluginMenuStringsNumber;
+ const wchar_t * const *PluginConfigStrings;
+ int PluginConfigStringsNumber;
+ const wchar_t *CommandPrefix;
+ DWORD SysID;
+ int MacroFunctionNumber;
+ const struct FarMacroFunction *MacroFunctions;
+};
+
+
+
+struct InfoPanelLine
+{
+ const wchar_t *Text;
+ const wchar_t *Data;
+ int Separator;
+};
+
+struct PanelMode
+{
+ const wchar_t *ColumnTypes;
+ const wchar_t *ColumnWidths;
+ const wchar_t * const *ColumnTitles;
+ int FullScreen;
+ int DetailedStatus;
+ int AlignExtensions;
+ int CaseConversion;
+ const wchar_t *StatusColumnTypes;
+ const wchar_t *StatusColumnWidths;
+ DWORD Reserved[2];
+};
+
+
+enum OPENPLUGININFO_FLAGS
+{
+ OPIF_USEFILTER = 0x00000001,
+ OPIF_USESORTGROUPS = 0x00000002,
+ OPIF_USEHIGHLIGHTING = 0x00000004,
+ OPIF_ADDDOTS = 0x00000008,
+ OPIF_RAWSELECTION = 0x00000010,
+ OPIF_REALNAMES = 0x00000020,
+ OPIF_SHOWNAMESONLY = 0x00000040,
+ OPIF_SHOWRIGHTALIGNNAMES = 0x00000080,
+ OPIF_SHOWPRESERVECASE = 0x00000100,
+ OPIF_COMPAREFATTIME = 0x00000400,
+ OPIF_EXTERNALGET = 0x00000800,
+ OPIF_EXTERNALPUT = 0x00001000,
+ OPIF_EXTERNALDELETE = 0x00002000,
+ OPIF_EXTERNALMKDIR = 0x00004000,
+ OPIF_USEATTRHIGHLIGHTING = 0x00008000,
+ OPIF_USECRC32 = 0x00010000,
+};
+
+
+enum OPENPLUGININFO_SORTMODES
+{
+ SM_DEFAULT,
+ SM_UNSORTED,
+ SM_NAME,
+ SM_EXT,
+ SM_MTIME,
+ SM_CTIME,
+ SM_ATIME,
+ SM_SIZE,
+ SM_DESCR,
+ SM_OWNER,
+ SM_COMPRESSEDSIZE,
+ SM_NUMLINKS,
+ SM_NUMSTREAMS,
+ SM_STREAMSSIZE,
+ SM_FULLNAME,
+ SM_CHTIME,
+};
+
+
+struct KeyBarTitles
+{
+ wchar_t *Titles[12];
+ wchar_t *CtrlTitles[12];
+ wchar_t *AltTitles[12];
+ wchar_t *ShiftTitles[12];
+
+ wchar_t *CtrlShiftTitles[12];
+ wchar_t *AltShiftTitles[12];
+ wchar_t *CtrlAltTitles[12];
+};
+
+
+enum OPERATION_MODES
+{
+ OPM_SILENT =0x0001,
+ OPM_FIND =0x0002,
+ OPM_VIEW =0x0004,
+ OPM_EDIT =0x0008,
+ OPM_TOPLEVEL =0x0010,
+ OPM_DESCR =0x0020,
+ OPM_QUICKVIEW =0x0040,
+};
+
+struct OpenPluginInfo
+{
+ int StructSize;
+ DWORD Flags;
+ const wchar_t *HostFile;
+ const wchar_t *CurDir;
+ const wchar_t *Format;
+ const wchar_t *PanelTitle;
+ const struct InfoPanelLine *InfoLines;
+ int InfoLinesNumber;
+ const wchar_t * const *DescrFiles;
+ int DescrFilesNumber;
+ const struct PanelMode *PanelModesArray;
+ int PanelModesNumber;
+ int StartPanelMode;
+ int StartSortMode;
+ int StartSortOrder;
+ const struct KeyBarTitles *KeyBar;
+ const wchar_t *ShortcutData;
+ long Reserved;
+};
+
+enum OPENPLUGIN_OPENFROM
+{
+ OPEN_FROM_MASK = 0x000000FF,
+
+ OPEN_DISKMENU = 0,
+ OPEN_PLUGINSMENU = 1,
+ OPEN_FINDLIST = 2,
+ OPEN_SHORTCUT = 3,
+ OPEN_COMMANDLINE = 4,
+ OPEN_EDITOR = 5,
+ OPEN_VIEWER = 6,
+ OPEN_FILEPANEL = 7,
+ OPEN_DIALOG = 8,
+ OPEN_ANALYSE = 9,
+
+ OPEN_FROMMACRO_MASK = 0x000F0000,
+
+ OPEN_FROMMACRO = 0x00010000,
+ OPEN_FROMMACROSTRING = 0x00020000,
+};
+
+enum FAR_PKF_FLAGS
+{
+ PKF_CONTROL = 0x00000001,
+ PKF_ALT = 0x00000002,
+ PKF_SHIFT = 0x00000004,
+ PKF_PREPROCESS = 0x00080000, // for "Key", function ProcessKey()
+};
+
+enum FAR_EVENTS
+{
+ FE_CHANGEVIEWMODE =0,
+ FE_REDRAW =1,
+ FE_IDLE =2,
+ FE_CLOSE =3,
+ FE_BREAK =4,
+ FE_COMMAND =5,
+
+ FE_GOTFOCUS =6,
+ FE_KILLFOCUS =7,
+};
+
+enum FAR_PLUGINS_CONTROL_COMMANDS
+{
+ PCTL_LOADPLUGIN = 0,
+ PCTL_UNLOADPLUGIN = 1,
+ PCTL_FORCEDLOADPLUGIN = 2,
+};
+
+enum FAR_PLUGIN_LOAD_TYPE
+{
+ PLT_PATH = 0,
+};
+
+enum FAR_FILE_FILTER_CONTROL_COMMANDS
+{
+ FFCTL_CREATEFILEFILTER = 0,
+ FFCTL_FREEFILEFILTER,
+ FFCTL_OPENFILTERSMENU,
+ FFCTL_STARTINGTOFILTER,
+ FFCTL_ISFILEINFILTER,
+};
+
+enum FAR_FILE_FILTER_TYPE
+{
+ FFT_PANEL = 0,
+ FFT_FINDFILE,
+ FFT_COPY,
+ FFT_SELECT,
+ FFT_CUSTOM,
+};
+
+enum FAR_REGEXP_CONTROL_COMMANDS
+{
+ RECTL_CREATE=0,
+ RECTL_FREE,
+ RECTL_COMPILE,
+ RECTL_OPTIMIZE,
+ RECTL_MATCHEX,
+ RECTL_SEARCHEX,
+ RECTL_BRACKETSCOUNT
+};
+
+struct RegExpMatch
+{
+ int start,end;
+};
+
+struct RegExpSearch
+{
+ const wchar_t* Text;
+ int Position;
+ int Length;
+ struct RegExpMatch* Match;
+ int Count;
+ void* Reserved;
+};
+
+
diff --git a/python/configs/plug/far2l/plugin.py b/python/configs/plug/far2l/plugin.py
new file mode 100644
index 00000000..8d4bee9c
--- /dev/null
+++ b/python/configs/plug/far2l/plugin.py
@@ -0,0 +1,20 @@
+class PluginBase:
+
+ menu = None
+ conf = None
+ area = None
+
+ def __init__(self, parent, info, ffi, ffic):
+ self.parent = parent
+ self.info = info
+ self.ffi = ffi
+ self.ffic = ffic
+
+ def s2f(self, s):
+ return self.ffi.new("wchar_t []", s)
+
+ def f2s(self, s):
+ return self.ffi.string(self.ffi.cast("wchar_t *", s))
+
+ def HandleCommandLine(self, line):
+ pass
diff --git a/python/configs/plug/far2l/pluginmanager.py b/python/configs/plug/far2l/pluginmanager.py
new file mode 100644
index 00000000..35e481f4
--- /dev/null
+++ b/python/configs/plug/far2l/pluginmanager.py
@@ -0,0 +1,171 @@
+import os
+import cffi
+from . import rpdb
+
+def installffi(ffi):
+ print('installffi(', __file__, ')')
+ dname = '/'.join(__file__.split('/')[:-1])
+ for fname in (
+ 'farwin.h',
+ 'farcolor.hpp',
+ 'farkeys.hpp',
+ 'plugin.hpp'
+ ):
+ data = open(os.path.join(dname, fname), 'rt').read()
+ ffi.cdef(data, packed=True)
+
+ffi = cffi.FFI()
+installffi(ffi)
+#ffi.cdef(open(__file__+'.h', 'rt').read(), packed=True)
+ffic = ffi.dlopen('c')
+
+from . import (
+ udialog,
+ ucharmap,
+)
+
+class PluginManager:
+ Info = None
+
+ def __init__(self):
+ self.plugins = []
+ self.menu2plugin = {}
+ self.conf2plugin = {}
+ self.cmd2plugin = {}
+ self.openplugins = {}
+
+ self.AddPlugin(udialog)
+ self.AddPlugin(ucharmap)
+
+ def AddPlugin(self, plugin):
+ n = len(self.plugins)
+ self.plugins.append(plugin)
+ self.menu2plugin[n] = plugin
+ self.conf2plugin[n] = plugin
+ self.cmd2plugin[n] = plugin
+
+ def debugger(self):
+ # in another window type: nc 127.0.0.1 7654
+ rpdb.RemotePdb(host='127.0.0.1', port=7654).set_trace()
+
+ def SetStartupInfo(self, Info):
+ #print('SetStartupInfo %08X' % Info)
+ self.Info = ffi.cast("struct PluginStartupInfo *", Info)
+
+ def GetPluginInfo(self, Info):
+ #print('GetPluginInfo %08X' % Info)
+ Info = ffi.cast("struct PluginInfo *", Info)
+ self._MenuItems = []
+ self._ConfigItems = []
+ for plugin in self.plugins:
+ if plugin.Plugin.menu:
+ self._MenuItems.append(ffi.new("wchar_t []", plugin.Plugin.menu))
+ if plugin.Plugin.conf:
+ self._ConfigItems.append(ffi.new("wchar_t []", plugin.Plugin.conf))
+ self.MenuItems = ffi.new("wchar_t *[]", self._MenuItems)
+ self.ConfigItems = ffi.new("wchar_t *[]", self._ConfigItems)
+ Info.Flags = ffic.PF_EDITOR |ffic.PF_VIEWER |ffic.PF_DIALOG
+ Info.DiskMenuStringsNumber = 0
+ Info.PluginMenuStrings = self.MenuItems
+ Info.PluginMenuStringsNumber = len(self._MenuItems)
+ Info.PluginConfigStrings = self.ConfigItems
+ Info.PluginConfigStringsNumber = len(self._ConfigItems)
+ Info.CommandPrefix = ffi.new("wchar_t []", "py")
+
+ def ClosePlugin(self, hPlugin):
+ print('ClosePlugin %08X' % hPlugin)
+
+ def Compare(self, hPlugin, PanelItem1, PanelItem2, Mode):
+ print('Compare', hPlugin, PanelItem1, PanelItem2, Mode)
+
+ def Configure(self, ItemNumber):
+ print('Configure', ItemNumber)
+
+ def DeleteFiles(self, hPlugin, PanelItem, ItemsNumber, OpMode):
+ print('DeleteFiles', hPlugin, PanelItem, ItemsNumber, OpMode)
+
+ def ExitFAR(self):
+ print('ExitFAR')
+
+ def FreeFindData(self, hPlugin, PanelItem, ItemsNumber):
+ print('FreeFindData', hPlugin, PanelItem, ItemsNumber)
+
+ def FreeVirtualFindData(self, hPlugin, PanelItem, ItemsNumber):
+ print('FreeVirtualData', hPlugin, PanelItem, ItemsNumber)
+
+ def GetFiles(self, hPlugin, PanelItem, ItemsNumber, Move, DestPath, OpMode):
+ print('GetFiles', hPlugin, PanelItem, ItemsNumber, Move, DestPath, OpMode)
+
+ def GetFindData(self, hPlugin, PanelItem, ItemsNumber, OpMode):
+ print('GetFindData', hPlugin, PanelItem, ItemsNumber, OpMode)
+
+ def GetMinFarVersion(self):
+ print('GetMinFarVersion')
+
+ def GetOpenPluginInfo(self, hPlugin, OpenInfo):
+ print('GetOpenPluginInfo', hPlugin, OpenInfo)
+
+ def GetVirtualFindData(self, hPlugin, PanelItem, ItemsNumber, Path):
+ print('GetVirtualFindData', hPlugin, PanelItem, ItemsNumber, Path)
+
+ def MakeDirectory(self, hPlugin, Name, OpMode):
+ print('MakeDirectory', hPlugin, Name, OpMode)
+
+ def OpenFilePlugin(self, Name, Data, DataSize, OpMode):
+ print('OpenFilePlugin', Name, Data, DataSize, OpMode)
+
+ def OpenPlugin(self, OpenFrom, Item):
+ if OpenFrom == ffic.OPEN_COMMANDLINE:
+ line = ffi.string(ffi.cast("wchar_t *", Item))
+ print('OpenFrom:', OpenFrom, line)
+ plugin = self.cmd2plugin[0].Plugin(self, self.Info, ffi, ffic)
+ rc = plugin.HandleCommandLine(line)
+ if rc not in (-1, None):
+ rc = id(plugin)
+ self.openplugins[rc] = plugin
+ return rc
+ print('OpenPlugin', OpenFrom, Item)
+ plugin = self.cmd2plugin[Item].Plugin(self, self.Info, ffi, ffic)
+ rc = plugin.OpenPlugin(OpenFrom)
+ if rc not in (-1, None):
+ rc = id(plugin)
+ self.openplugins[rc] = plugin
+ return rc
+
+ def ProcessDialogEvent(self, Event, Param):
+ #print('ProcessDialogEvent', Event, Param)
+ pass
+
+ def ProcessEditorEvent(self, Event, Param):
+ #print('ProcessEditorEvent', Event, Param)
+ pass
+
+ def ProcessEditorInput(self, Rec):
+ print('ProcessEditorInput', Rec)
+
+ def ProcessEvent(self, hPlugin, Event, Param):
+ #print('ProcessEvent', hPlugin, Event, Param)
+ pass
+
+ def ProcessHostFile(self, hPlugin, PanelItem, ItemsNumber, OpMode):
+ print('ProcessHostFile', hPlugin, PanelItem, ItemsNumber, OpMode)
+
+ def ProcessKey(self, hPlugin, Key, ControlState):
+ print('ProcessKey', hPlugin, Key, ControlState)
+
+ def ProcessSynchroEvent(self, Event, Param):
+ #print('ProcessSynchroEvent', Event, Param)
+ pass
+
+ def ProcessViewerEvent(self, Event, Param):
+ #print('ProcessViewerEvent', Event, Param)
+ pass
+
+ def PutFiles(self, hPlugin, PanelItem, ItemsNumber, Move, SrcPath, OpMode):
+ print('PutFiles', hPlugin, PanelItem, ItemsNumber, Move, SrcPath, OpMode)
+
+ def SetDirectory(self, hPlugin, Dir, OpMode):
+ print('SetDirectory', hPlugin, Dir, OpMode)
+
+ def SetFindList(self, hPlugin, PanelItem, ItemsNumber):
+ print('SetFindList', hPlugin, PanelItem, ItemsNumber)
diff --git a/python/configs/plug/far2l/rpdb.py b/python/configs/plug/far2l/rpdb.py
new file mode 100644
index 00000000..cfbeb5dc
--- /dev/null
+++ b/python/configs/plug/far2l/rpdb.py
@@ -0,0 +1,125 @@
+import errno
+import logging
+import re
+import socket
+import sys
+
+from pdb import Pdb
+
+__version__ = "1.2.0"
+
+PY3 = sys.version_info[0] == 3
+
+
+def cry(message, stderr=sys.__stderr__):
+ logging.critical(message)
+ print(message, file=stderr)
+ stderr.flush()
+
+
+class LF2CRLF_FileWrapper(object):
+ def __init__(self, fh):
+ self.stream = fh
+ self.read = fh.read
+ self.readline = fh.readline
+ self.readlines = fh.readlines
+ self.close = fh.close
+ self.flush = fh.flush
+ self.fileno = fh.fileno
+
+ @property
+ def encoding(self):
+ return self.stream.encoding
+
+ def __iter__(self):
+ return self.stream.__iter__()
+
+ def write(self, data, nl_rex=re.compile("\r?\n")):
+ self.stream.write(nl_rex.sub("\r\n", data))
+ # we have to explicitly flush, and unfortunately we cannot just disable buffering because on Python 3 text
+ # streams line buffering seems the minimum and on Windows line buffering doesn't work properly because we
+ # write unix-style line endings
+ self.stream.flush()
+
+ def writelines(self, lines, nl_rex=re.compile("\r?\n")):
+ self.stream.writelines(nl_rex.sub("\r\n", line) for line in lines)
+ self.stream.flush()
+
+
+class RemotePdb(Pdb):
+ """
+ This will run pdb as a ephemeral telnet service. Once you connect no one
+ else can connect. On construction this object will block execution till a
+ client has connected.
+
+ Based on https://github.com/tamentis/rpdb I think ...
+
+ To use this::
+
+ RemotePdb(host='0.0.0.0', port=4444).set_trace()
+
+ Then run: telnet 127.0.0.1 4444
+ """
+ active_instance = None
+
+ def __init__(self, host, port, patch_stdstreams=False):
+ listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
+ listen_socket.bind((host, port))
+ cry("RemotePdb session open at %s:%s, waiting for connection ..." % listen_socket.getsockname())
+ listen_socket.listen(1)
+ connection, address = listen_socket.accept()
+ cry("RemotePdb accepted connection from %s." % repr(address))
+ if PY3:
+ self.handle = LF2CRLF_FileWrapper(connection.makefile('rw'))
+ else:
+ self.handle = LF2CRLF_FileWrapper(connection.makefile())
+ Pdb.__init__(self, completekey='tab', stdin=self.handle, stdout=self.handle)
+ self.backup = []
+ if patch_stdstreams:
+ for name in (
+ 'stderr',
+ 'stdout',
+ '__stderr__',
+ '__stdout__',
+ 'stdin',
+ '__stdin__',
+ ):
+ self.backup.append((name, getattr(sys, name)))
+ setattr(sys, name, self.handle)
+ RemotePdb.active_instance = self
+
+ def __restore(self):
+ if self.backup:
+ cry('Restoring streams: %s ...' % self.backup)
+ for name, fh in self.backup:
+ setattr(sys, name, fh)
+ self.handle.close()
+ RemotePdb.active_instance = None
+
+ def do_quit(self, arg):
+ self.__restore()
+ self.set_quit()
+ return 1
+
+ do_q = do_exit = do_quit
+
+ def set_trace(self, frame=None):
+ if frame is None:
+ frame = sys._getframe().f_back
+ try:
+ Pdb.set_trace(self, frame)
+ except IOError as exc:
+ if exc.errno != errno.ECONNRESET:
+ raise
+
+ def set_quit(self):
+ sys.settrace(None)
+
+
+def set_trace(host='127.0.0.1', port=0, patch_stdstreams=False):
+ """
+ Opens a remote PDB on first available port.
+ """
+ rdb = RemotePdb(host=host, port=port, patch_stdstreams=patch_stdstreams)
+ rdb.set_trace(frame=sys._getframe().f_back)
diff --git a/python/configs/plug/far2l/ucharmap.py b/python/configs/plug/far2l/ucharmap.py
new file mode 100644
index 00000000..240f7aa5
--- /dev/null
+++ b/python/configs/plug/far2l/ucharmap.py
@@ -0,0 +1,104 @@
+from .plugin import PluginBase
+
+class Plugin(PluginBase):
+ menu = "Character Map"
+ area = "Shell Editor Dialog"
+
+ def Rebuild(self, hDlg):
+ self.info.SendDlgMessage(hDlg, self.ffic.DM_ENABLEREDRAW, 0, 0)
+ prefix = ["", "&"]
+ for i in range(len(self.symbols)):
+ row = i // self.max_col
+ col = i % self.max_col
+ p = prefix[row == self.cur_row and col == self.cur_col]
+ offset = self.first_text_item+row*self.max_col+col
+ ch = self.s2f(p+self.symbols[i])
+ self.info.SendDlgMessage(hDlg, self.ffic.DM_SETTEXTPTR, offset, self.ffi.cast("LONG_PTR", ch))
+ self.info.SendDlgMessage(hDlg, self.ffic.DM_ENABLEREDRAW, 1, 0)
+
+ def OpenPlugin(self, OpenFrom):
+ symbols = []
+ for i in range(256):
+ symbols.append(chr(i))
+ symbols.extend([
+ "Ђ", "Ѓ", "‚", "ѓ", "„", "…", "†", "‡", "€", "‰", "Љ", "‹", "Њ", "Ќ", "Ћ", "Џ", "ђ", "‘", "’", "“", "”", "•", "–", "—", "˜", "™", "љ", "›", "њ", "ќ", "ћ", "џ",
+ " ", "Ў", "ў", "Ј", "¤", "Ґ", "¦", "§", "Ё", "©", "Є", "«", "¬", "­", "®", "Ї", "°", "±", "І", "і", "ґ", "µ", "¶", "·", "ё", "№", "є", "»", "ј", "Ѕ", "ѕ", "ї",
+ "А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я",
+ "а", "б", "в", "г", "д", "е", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я",
+ "░", "▒", "▓", "│", "┤", "╡", "╢", "╖", "╕", "╣", "║", "╗", "╝", "╜", "╛", "┐", "└", "┴", "┬", "├", "─", "┼", "╞", "╟", "╚", "╔", "╩", "╦", "╠", "═", "╬", "╧",
+ "╨", "╤", "╥", "╙", "╘", "╒", "╓", "╫", "╪", "┘", "┌", "█", "▄", "▌", "▐", "▀", "∙", "√", "■", "⌠", "≈", "≤", "≥", "⌡", "²", "÷", "ą", "ć", "ę", "ł", "ń", "ó",
+ "ś", "ż", "ź", "Ą", "Ć", "Ę", "Ł", "Ń", "Ó", "Ś", "Ż", "Ź", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
+ ])
+ Items = [
+ (self.ffic.DI_DOUBLEBOX, 3, 1, 38, 18, 0, {'Selected':0}, 0, 0, self.s2f("Character Map"), 0),
+ (self.ffic.DI_BUTTON, 7, 17, 12, 18, 0, {'Selected':0}, 1, self.ffic.DIF_DEFAULT + self.ffic.DIF_CENTERGROUP, self.s2f("OK"), 0),
+ (self.ffic.DI_BUTTON, 13, 17, 38, 18, 0, {'Selected':0}, 0, self.ffic.DIF_CENTERGROUP, self.s2f("Cancel"), 0),
+ (self.ffic.DI_USERCONTROL, 3, 13, 38, 17, 0, {'Selected':0}, 0, self.ffic.DIF_FOCUS, self.ffi.NULL, 0),
+ ]
+ self.cur_row = 0
+ self.cur_col = 0
+ self.max_col = 32
+ self.max_row = len(symbols) // self.max_col
+ self.first_text_item = 4
+ self.symbols = symbols
+
+ for i in range(len(symbols)):
+ row = i // self.max_col
+ col = i % self.max_col
+ Items.append((self.ffic.DI_TEXT, 5+col, self.first_text_item-2+row, 5+col, self.first_text_item-2+row, 0, {'Selected':0}, 0, 0, self.ffi.NULL, 0))
+
+ @self.ffi.callback("FARWINDOWPROC")
+ def DialogProc(hDlg, Msg, Param1, Param2):
+ if Msg == self.ffic.DN_INITDIALOG:
+ self.Rebuild(hDlg)
+ elif Msg == self.ffic.DN_KEY:
+ if Param2 == self.ffic.KEY_LEFT:
+ self.cur_col -= 1
+ elif Param2 == self.ffic.KEY_UP:
+ self.cur_row -= 1
+ elif Param2 == self.ffic.KEY_RIGHT:
+ self.cur_col += 1
+ elif Param2 == self.ffic.KEY_DOWN:
+ self.cur_row += 1
+ elif Param2 == self.ffic.KEY_ENTER:
+ print('DialogProc(', hDlg, ', DN_KEY,', Param1, ',', Param2, ')')
+ offset = self.cur_row*self.max_col+self.cur_col
+ ch = self.symbols[offset]
+ print('enter row:', self.cur_row, 'col:', self.cur_col, 'ch=', ch)
+ return 0
+ elif Param2 == self.ffic.KEY_ESC:
+ return 0
+ else:
+ print('key DialogProc(', hDlg, ', DN_KEY,', Param1, ',', Param2, ')')
+ return 1
+ if self.cur_col == self.max_col:
+ self.cur_col = 0
+ elif self.cur_col == -1:
+ self.cur_col = self.max_col - 1
+ if self.cur_row == self.max_row:
+ self.cur_row = 0
+ elif self.cur_row == -1:
+ self.cur_row = self.max_row - 1
+ self.Rebuild(hDlg)
+ return 1
+ elif Msg == self.ffic.DN_MOUSECLICK:
+ print('DialogProc(', hDlg, ', DN_MOUSECLICK,', Param1, ',', Param2, ')')
+ ch = Param1 - self.first_text_item
+ if ch >= 0:
+ self.cur_row = ch // self.max_col
+ self.cur_col = ch % self.max_col
+ self.cur_col = min(max(0, self.cur_col), self.max_col-1)
+ self.cur_row = min(max(0, self.cur_row), self.max_row-1)
+ self.Rebuild(hDlg)
+ return 1
+ else:
+ print('click')
+ return 0
+ return self.info.DefDlgProc(hDlg, Msg, Param1, Param2)
+
+ fdi = self.ffi.new("struct FarDialogItem []", Items)
+ hDlg = self.info.DialogInit(self.info.ModuleNumber, -1, -1, 42, 20, self.s2f("Character Map"), fdi, len(fdi), 0, 0, DialogProc, 0)
+ res = self.info.DialogRun(hDlg)
+ if res != -1:
+ pass
+ self.info.DialogFree(hDlg)
diff --git a/python/configs/plug/far2l/udialog.py b/python/configs/plug/far2l/udialog.py
new file mode 100644
index 00000000..fafaa5b1
--- /dev/null
+++ b/python/configs/plug/far2l/udialog.py
@@ -0,0 +1,54 @@
+from .plugin import PluginBase
+
+class Plugin(PluginBase):
+ menu = "Python Command"
+ area = "Shell"
+
+ def HandleCommandLine(self, line):
+ if line == 'dialog':
+ print('dialog')
+ @self.ffi.callback("FARWINDOWPROC")
+ def KeyDialogProc(hDlg, Msg, Param1, Param2):
+ #if Msg == self.ffic.DN_KEY:
+ # if Param2 == 27:
+ # return 0
+ return self.info.DefDlgProc(hDlg, Msg, Param1, Param2)
+
+ fdis = [
+ (self.ffic.DI_DOUBLEBOX, 2, 1, 31, 4, 0, {'Selected':0}, 0, 0, self.s2f("Python"), 0),
+ (self.ffic.DI_TEXT, -1, 2, 0, 2, 0, {'Selected':0}, 0, 0, self.s2f("Plugin path"), 0),
+ (self.ffic.DI_EDIT, 5, 3, 28, 3, 0, {'Selected':0}, 0, 0, self.ffi.NULL, 0),
+ ]
+ fdi = self.ffi.new("struct FarDialogItem []", fdis)
+ hDlg = self.info.DialogInit(self.info.ModuleNumber, -1, -1, 34, 6, self.s2f("Set Python Path"), fdi, len(fdi), 0, 0, KeyDialogProc, 0)
+ res = self.info.DialogRun(hDlg)
+ if res != -1:
+ sptr = self.info.SendDlgMessage(hDlg, self.ffic.DM_GETCONSTTEXTPTR, 2, 0)
+ path = self.f2s(sptr)
+ print('path:', path)
+ self.info.DialogFree(hDlg)
+ print('end dialog')
+ else:
+ exec(line, globals(), locals())
+ return -1
+
+ def OpenPlugin(self, OpenFrom):
+ _MsgItems = [
+ self.s2f("Python"),
+ self.s2f(""),
+ self.s2f("python.cpp: compiling..."),
+ self.s2f(" 0 error(s), 0 warning(s) :-)"),
+ self.s2f(""),
+ self.s2f("\x01"),
+ self.s2f("&Ok"),
+ ]
+ MsgItems = self.ffi.new("wchar_t *[]", _MsgItems)
+ self.info.Message(
+ self.info.ModuleNumber, # GUID
+ self.ffic.FMSG_WARNING|self.ffic.FMSG_LEFTALIGN, # Flags
+ self.s2f("Contents"), # HelpTopic
+ MsgItems, # Items
+ len(MsgItems), # ItemsNumber
+ 1 # ButtonsNumber
+ )
+ return -1
diff --git a/python/configs/plug/pythonEng.hlf b/python/configs/plug/pythonEng.hlf
new file mode 100644
index 00000000..e083c8cc
--- /dev/null
+++ b/python/configs/plug/pythonEng.hlf
@@ -0,0 +1,7 @@
+.Language=English,English (English)
+.PluginContents=Python
+
+@Contents
+$ #Python#
+ This plugin for FAR Manager is intended for those programmers,
+who just do the first step in plugin programming.