                    The FAR File and Archive Manager
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
             What's new in the latest version (Plugin API)
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[!] Important
[+] New
[-] Fixed error
[*] Changes

---------------------------------------------------------------------------
FAR 1.70 (build 2087) (29.03.2006)
---------------------------------------------------------------------------
Editor
~~~~~~
[*] Now plugins receive keyboard events through ProcessEditorInput both
    when recording and when playing back macros. Previously, keyboard
    events were received only when recording macros.
[+] The constant FARMACRO_KEY_EVENT defines the input message type of
    the INPUT_RECORD structure which is passed to ProcessEditorInput
    when a macro is played back. The Event field contains a KEY_EVENT_RECORD
    structure describing the keyboard message.
[*] Removed some of the limitations on the keys sent to plugins through
    ProcessEditorInput.
    Keys which are not sent to plugins: Ctrl-W, F11, Alt-F9, F12, Ctrl-Tab,
    Ctrl-Shift-Tab, Alt-Ins, Ctrl-Alt-Shift.
    The following key combinations are sent if:
      Alt-F5 - the PrintMan plugin is not installed;
      Alt-F11 - the editor is modal;
      F6 - switching to the viewer is disabled
[+] The command ESPT_SETWORDDIV allows to change the word delimiter list for
    the current editor window.
[+] The ESPT_GETWORDDIV command - allows to get the word dividing
    characters for the current editor instance.
[-] FAR didn't remember new filename after ECTL_SAVEFILE command call.
[-] Custom editor title (See Title variable in the Editor function)
    was corrupted upon saving the file in editor invoked from a
    plugin.
[!] New flag - ECF_TAB1. Starting with build 1957 FAR highlights Tab
    characters by their full width. If you need the Tab character to
    take the width of only one character in the color region then it is
    necessary to add the ECF_TAB1 flag to the EditorColor.Color member
    in addition to specifying the color.
[!] ECTL_GETBOOKMARKS and ECTL_GETINFO can be called during an EE_CLOSE event.
[-] Wrong value of EditorInfo.BlockStartLine.
    For example, there are two non-empty lines - N and N+1. The cursor is
    positioned in the middle of the N+1 line. No selection. Press Shift-Left
    until the cursor is positioned in the middle of the N line. At this moment
    EditorInfo.BlockStartLine equals N+1 and not N as was expected.

Dialogs
~~~~~~~
[-] For an empty DI_LISTBOX, the DM_LISTSETTITLES message did not show
    the list header and footer.
[-] Duplicate cursor after deleting items from a DI_LISTBOX if the
    cursor is not positioned on the item being deleted.
[+] Messages DM_GETSELECTION and DM_SETSELECTION allowing to control
    the block selection in dialog edit lines.
[-] Wrong centering of elements DI_RADIOBUTTON and DI_CHECKBOX with the
    DIF_CENTERGROUP flag set.
[+] The message DN_DRAWDIALOGDONE - arrives when the drawing of the
    dialog is done.
[-] The cursor is turned off when dialog doesn't have elements accepting
    focus (edit fields/buttons etc.).
[-] If the dialog title starts with a number then this number is removed
    when the console title is set.
[-] Changing focus (pressing Tab or Shift-Tab) in a dialog with a single
    element hanged FAR Manager.
[+] The FarDialogItem.Data item of a DI_LISTBOX element is used as the
    upper list title.
[+] If a dialog contains no borders (DI_SINGLEBOX, DI_DOUBLEBOX) and the
    DI_LISTBOX element is the first element, then the console title is set
    to the title of the list (DI_LISTBOX).
[*] The message DM_LISTSETMOUSEREACTION now allows for more flexible
    behavior of the list in response to mouse movements. You can set three
    states:
     1 - the list selection will follow mouse movement only when it has focus
     2 - the list selection will always follow mouse movement
     3 - the list selection will not follow mouse movement
[+] The DN_LISTHOTKEY message - arrives when the user used a hotkey to move
    inside a list (DI_LISTBOX).
[-] The DN_LISTCHANGE message was sent on every mouse movement even if
    that movement was within one list element, that is even if nothing
    was changed.
[!] Added a limitation that the width and height of a dialog element
    cannot exceed the width and height of the dialog itself.
[-] Sending the DM_SETCURSORPOS message for edit controls while
    processing the DN_INITDIALOG event caused the edit control to be
    drawn before the dialog itself was drawn.
[-] The DN_EDITCHANGE event for combo-boxes was sent with an erroneous
    element ID.
[-] DI_TEXT element was not always drawn correctly. If a line was outputted
    and after that a shorter line was outputted to the same DI_TEXT element
    then the end of the previous line remained visible.

Miscellaneous
~~~~~~~~~~~~~
[-] For several sequential ACTL_POSTKEYSEQUENCE calls, only the first
    one was actually effective.
[-] Fixed a bug in FSF.TruncStr causing a corruption of the memory
    beyond the end of the buffer.
[+] New flag FRS_SCANSYMLINK for the FarRecursiveSearch function enables
    entering symbolic links when scanning the directory tree.
[+] New command ACTL_GETPLUGINMAXREADDATA. Returns the maximum size of
    the data that FAR can read from a file before passing control to
    the OpenFilePlugin function.
[+] New command ACTL_GETWCHARMODE. Returns TRUE if FAR is working with
    the console in Unicode mode and FALSE if the 8-bit mode is used.
[!] Now GetReparsePointInfo returns an error for remote folders, because
    correct information about symbolic link contents can not be obtained in
    such case.
[*] Because some settings had been moved to the "Dialog settings" dialog, a
    new command ACTL_GETDIALOGSETTINGS was added and the values and names of
    the following constants were changed accordingly:
    FIS_PERSISTENTBLOCKSINEDITCONTROLS -> FDIS_PERSISTENTBLOCKSINEDITCONTROLS
    FIS_HISTORYINDIALOGEDITCONTROLS    -> FDIS_HISTORYINDIALOGEDITCONTROLS
    FIS_AUTOCOMPLETEININPUTLINES       -> FDIS_AUTOCOMPLETEININPUTLINES
[-] Garbage had been returned in PanelInfo.SelectedItems[0] when no files were
    selected and the cursor was positioned on the ".." element.
[*] All enumerations in plugin.hpp are now named.
[+] New command MCMD_POSTMACROSTRING - pass a macro sequence to FAR in
    text form (in the same form it is stored in the registry).
[*] Updated the ActlKeyMacro structure: added the Param.PlainText
    member - pointer to a string containing a macro sequence.
[+] New flag KSFLAGS_NOSENDKEYSTOPLUGINS - do not send keystrokes to
    editor plugins (i.e. plugins that export /ProcessEditorInput/)
[-] The 'Key = FarNameToKey ("AltCtrl<None English Letter>") ->
    FarKeyToName (Key)' transformation was incorrect (Alt00000 was
    returned instead of AltCtrl<None English Letter>)
[-] It was not allowed to add spaces after the ".Language" directive
    in the .lng file (e.g. ".Language = foo").
[-] The FSF.FarRecursiveSearch function couldn't find a file if its short
    name was given as the file mask.
[+] New flag FMENU_CHANGECONSOLETITLE for the Menu function.
    If set, FAR Manager will set the console title to the value
    given in the Title argument (if Title is not empty).
[+] Obvious additions to the numeric sort:
    the commands FCTL_SETNUMERICSORT and FCTL_SETANOTHERNUMERICSORT
    the flag PFLAGS_NUMERICSORT (Numeric Sort is on) in PanelInfo.Flags
[-] FAR could crash if Path was set to NULL in the FSF.PointToName() function.
[+] New commad ACTL_GETSHORTWINDOWINFO - thread safe analogue of the
    ACTL_GETWINDOWINFO command.
[-] FCTL_GET[ANOTHER]PANELSHORTINFO were breaking the "inviolability"
    principle and destroyed data that was received by a previous call to
    FCTL_GET[ANOTHER]PANELINFO.
[*] Now FE_CLOSE is received by the panel only if the call to OpenPlugin
    function of a new plugin returned hPlugin != INVALID_HANDLE_VALUE. If
    the previous panel informs that it cannot be closed - the panel of the
    new plugin will be closed by a call to the ClosePlugin function.
[-] Far could crash if the FMENU_CHANGECONSOLETITLE flag was used.


Viewer
~~~~~~
[!] Documentation of the Viewer API is open to the public.


---------------------------------------------------------------------------
FAR 1.70 beta 5 (build 1634) (08.04.2003)
---------------------------------------------------------------------------
General
~~~~~~~
[!] The second parameter of the exported function SetFindList is now
    declared as const.
[!] Changed the specification of the OpenPluginInfo structure - some
    members have been made const.
[!] While the ExitFAR exported function is being processed, the following
    service functions are not available to plugins:
    InputBox, Menu, Dialog[Ex], GetMsg, Message, Control, SaveScreen,
    RestoreScreen, GetDirList, Viewer, Editor, CharTable, Text, EditorControl,
    GetPluginDirList, ShowHelp, AdvControl (partially).
    Only the following AdvControl commands are available:
    ACTL_GETFARVERSION, ACTL_GETSYSWORDDIV, ACTL_GETCOLOR, ACTL_GETARRAYCOLOR,
    ACTL_GETFARHWND, ACTL_GETSYSTEMSETTINGS, ACTL_GETPANELSETTINGS,
    ACTL_GETINTERFACESETTINGS, ACTL_GETCONFIRMATIONS, ACTL_GETDESCSETTINGS.
[!] It is now allowed to create a non-modal editor or viewer from a modal one.
[!] It is not allowed to switch from a modal window to another one.
[!] Increased the size of the FAR Manager color palette. New colors for
    DI_LISTBOX and DI_COMBOBOX items have been added.
[!] Renamed the constants CONSOLE_* to FAR_CONSOLE_*, because of a
    conflict with constants in WinCon.h
[+] Two new flags VF_IMMEDIATERETURN and EF_IMMEDIATERETURN allowing a plugin
    to get control immediately after an editor or viewer has been opened.
    The editor or viewer will actually start working after the plugin returns
    control to FAR. Can be used to open multiple editors or viewers at once.
[+] VF_DELETEFILEONCLOSE and EF_DELETEFILEONCLOSE - similar to
    VF_DELETEONCLOSE and EF_DELETEONCLOSE, but only the file is deleted,
    and the folder containing it is not deleted even if it's empty.
[*] Revision in GCCReadme.txt
[-] Character table names returned to plugins through the CharTable()
    function did not match the names shown in the Shift-F8 menu.
[-] FAR modified the data passed by the plugin for the Information
    pane (Ctrl-L).
[*] Added strict checks for the size of the editor and viewer windows
    (parameters X1, Y1, X2, Y2 of the Editor and Viewer functions).

Editor
~~~~~~
[+] ESPT_LOCKMODE - plugins can now set or clear the locked
    (read-only) mode of the internal editor.
[+] ECTL_TURNOFFMARKINGBLOCK - resets the editor flag that is set while
    the user is selecting a block in the editor.
[+] New command ECTL_DELETEBLOCK - delete the selected block in the editor.
[-] Crash in the ECTL_SETSTRING handler if EditorSetString.StringLength
    contained a negative value.

Dialogs
~~~~~~~
[!] Changed the constants COL_DIALOGMENU* to COL_DIALOGLIST*.
[!] Changed the DN_CTLCOLORDLGLIST message. Now Param1 specifies the
    index of the dialog item (DI_LISTBOX, DI_COMBOBOX or an edit control
    with the input history). Param2 points to a FarListColors structure
    describing the color palette of the list.
[+] New flag LIF_DELETEUSERDATA instructing FAR to delete the
    associated data when a list item is updated with a DM_LISTUPDATE
    command. By default, the user data is not deleted when an item is
    updated.
[+] New flag DIF_CENTERTEXT for static elements DI_TEXT and DI_VTEXT.
[+] Two new flags for the DialogEx function:
    FDLG_NODRAWSHADOW - do not draw the dialog shadow
    FDLG_NODRAWPANEL - do not draw the dialog background
[+] The color of the title of a DI_LISTBOX item is now specified as
    COL_DIALOGLISTTITLE.
[*] Changed the behaviour when updating a list (DM_LISTUPDATE):
    user data attached to a list item (DM_LISTSETDATA) is not deleted
    automatically.
[*] DM_SETTEXT (DM_SETTEXTPTR) now work for DI_LISTBOX. The current list
    element is updated. Its user data (DM_LISTSETDATA) is not changed.
[*] For a DI_SINGLEBOX (DI_DOUBLEBOX) with equal X or Y coordinates
    (X1 = X2 or Y1 = Y2), a vertical or horizontal line is drawn
    instead of the box.
[*] If a DIF_SETCOLOR flag is specified for a DI_SINGLEBOX (DI_DOUBLEBOX),
    the lower byte allows to specify the color of the frame.
[*] When the FDLG_SMALLDIALOG flag is specified, the dialog background is
    now drawn.
[*] The default color for the COL_DIALOGLISTDISABLED index is now dark
    gray on white gray.
[-] List boxes with the DIF_LISTNOBOX flag were not displayed correctly.
[-] Hotkeys in DI_LISTBOX lists were not handled.
[-] When a DI_LISTBOX list was active, dialog hotkeys were not handled.
[-] DI_EDIT elements with the DIF_SELECTONENTRY flag set were not drawn
    correctly when they got the input focus.
[-] Long dialog captions were processed incorrectly.
[-] Programmatic toggling (DM_SETCHECK) for a group of radio buttons
    (DI_RADIOBUTTON) was not performed correctly.
[-] The color of separator lines in the dialogs did not match the
    color of border frames.
[-] DM_LISTADDSTR returned an incorrect value of the new list element
    position.
[-] When a DM_LISTSETCURPOS message with FarListPos.TopPos equal to -1
    was sent, the list top position was calculated incorrectly.
[-] Pressing Ctrl-Ins in an input line marked it as changed.
[-] A list box with the height of 1 and the DIF_LISTNOBOX flag was not
    drawn correctly.

Miscellaneous
~~~~~~~~~~~~~
[+] A new flag FIB_NOAMPERSAND for the InputBox() function. If this
    flag is set, ampersands are not shown in the input box prompt but
    are used to define hotkeys instead.
[+] The exported function PutFiles can return the value 2 (success,
    but the cursor should not be positioned to a file).
[+] FCTL_GETPANELSHORTINFO - Similar to FCTL_GETPANELINFO, but the fields
    PanelItems and SelectedItems of the PanelInfo structure are not filled
    and are equal to NULL. This command is used to get general information
    on a panel without retrieving the exact file content.
[+] FCTL_GETANOTHERPANELSHORTINFO - Similar to FCTL_GETPANELSHORTINFO,
    but returns information on the passive panel.
[+] New command FCTL_CHECKPANELSEXIST. Allows to check if the file
    panels are available. When FAR is started with the command line
    parameters /e or /v (as an external editor or viewer), the panels
    are not created.
[+] The function FSF.MkLink updates the panels itself unless the
    flag FLINK_DONOTUPDATEPANEL is specified.
[-] The function FSF.MkLink did not create the symbolic link correctly
    if the full path to a directory was specified as the source.
[+] New command ACTL_SETARRAYCOLOR allowing to change the color palette
    of FAR Manager.
[*] Now, if the panel has an Owner column, the data in this column is
    passed to the plugins when an array of PluginPanelItem structures
    is passed to them. If the Owner column is not shown, the Owner field
    is equal to NULL, like in earlier versions.
[-] The current item in the menus was not drawn correctly if the first
    item in the passed array of items was a separator and the current
    item was not specified (or the separator itself was marked as the
    current item).
[-] Trying to call Message (FMSG_ALLINONE, "\nFoobar") caused a crash of
    FAR (the first character "\n" was used to show a message box without
    a caption)
[-] Incorrect clipping of long titles (the Title parameter) in the
    Message function.
[-] The function FSF.ConvertNameToReal worked incorrectly for the
    current directory.


---------------------------------------------------------------------------
FAR 1.70 beta 4 (build 1282) (13.03.2002)
---------------------------------------------------------------------------

General
~~~~~~~

[!] You should not use the constant FARMANAGERVERSION when
    implementing GetMinFarVersion(). Use the new macro MAKEFARVERSION
    instead.
[!] The definition of the FarDialogItem structure has been changed, in
    order to make it possible to use plugin.hpp with pure C compilers.
[!] The definition of the FarFindData structure has been changed, in
    order to make it possible to achieve correct structure alignment
    with all compilers.
[!] All the fields of the CharTableSet structure, except for TableName,
    now have the type unsigned char.
[!] Removed the limit of 13 elements for the Message function.
[!] The format of HelpTopic for menus, dialogs and message boxes can be:
     1. ":Topic"
        call a FAR help topic
     2. "Topic"
        call a local help topic
     3. "<FullModuleName>Topic"
        call a help topic from the directory where the plugin module
        "FullModuleName" resides.
     4. "<FullPath>Topic"
        call a help topic from the directory "FullPath".
        In this case, "FullPath" MUST be terminated with a backslash
        ('\').
     If the topic is not specified in the cases 3 and 4, the topic
     "Contents" will be substituted.
[+] It is possible to specify tabulation size in .HLF files by inserting a
    line ".Options TabSize=<Size>" in the beginning of a .HLF file. Size
    must belong to the range from 1 to 16. The default tabulation size is
    8.
[+] Two new "keys" for the mouse wheel - KEY_MSWHEEL_UP/KEY_MSWHEEL_DOWN.
[+] New color COL_MENUDISABLEDTEXT - disabled menu item.
[+] FMENU_USEEXT, MIF_*, FarMenuItemEx - "extended" menus.

Panels
~~~~~~
[!] New field Flags in the PanelInfo structure. Also added the flags
    PANELINFOFLAGS.
[+] New field in the PluginPanelItem structure - CRC32.
[+] FCTL_GETCMDLINESELECTION, FCTL_SETCMDLINESELECTION,
    FCTL_GETCMDLINESELECTEDTEXT
[*] GetPluginDirList(): if the parameter hPlugin is equal to
    INVALID_HANDLE_VALUE, the value of the parameter PluginNumber is
    ignored (the number of the active panel plugin is used instead).
[-] The flag OPM_TOPLEVEL was not passed to ProcessHostFile when it
    was required (pressing Shift-F3 on an archive in a file panel).
[-] The filename passed to a plugin in the GetFiles() function was
    truncated to the first dot. This caused the error when MultiArc
    offered to unpack the archive "some.foo.rar" to the directory
    "some\".

Editor
~~~~~~
[!] EditorGetString.StringText and EditorGetString.EditorGetString.StringEOL
    are declared as const.
[+] New flags VF_ENABLE_F6 (for the Viewer function) and EF_ENABLE_F6 (for
    the Editor function) allowing to switch from the viewer or editor
    opened by the respective functions by pressing F6.
[+] ECTL_GETBOOKMARKS, struct EditorBookMarks - information about
    bookmarks in the editor (EditorInfo.BookMarkCount - number of
    bookmarks supported by the editor).
[+] Plugins can use EditorControl/ECTL_SETPARAM to change the current code
    page in the editor.
[+] EditorInfo.CurState - current state of the editor (new flags - ECSTATE_*)
[+] New flag EF_DELETEONCLOSE. Analog of VF_DELETEONCLOSE.
[+] Flag EF_DISABLE_HISTORY in the Editor function - disable adding
    of the filename to the view/edit history (Alt-F11). By default,
    the filename is added to the history.
[*] The event EE_READ is also sent to plugins when a new file is created.
[*] ECTL_READINPUT: while a macro is being executed, a correctly filled
    INPUT_RECORD structure is returned to the plugin.
[!] Now the Viewer() function returns FALSE in case of file open failure
    also when the VF_NONMODAL flag is set.
[-] The command ECTL_QUIT was not handled correctly.

Dialogs
~~~~~~~
[!] Changed the logic of the DN_BTNCLICK message return value for
    DI_BUTTON items. Now the logic is:
    For DI_BUTTON:
      TRUE - the message has been handled, do not continue processing
      by the dialog kernel
      FALSE - continue processing by the dialog kernel
    For other items:
      TRUE - perform the change (and display the user input)
      FALSE - disallow the change
[!] The flag LIF_PTRDATA has been deleted, as it's no longer needed.
    Respectively, the structure FarListItem has been changed.
[!] Text size of FarListItem - 128 bytes + DWORD Reserved [3]
[!] The flag DIF_CENTERGROUP applies only to the following elements:
    DI_BUTTON, DI_CHECKBOX, DI_RADIOBUTTON and DI_TEXT.
[!] DM_GETTEXTLENGTH returns the size of the string not including the
    trailing '\0'.
[+] Dialog messages for working with lists (DI_LISTBOX and DI_COMBOBOX) -
    DM_LISTSORT, DM_LISTGET, DM_LISTGETCURPOS, DM_LISTSETCURPOS, DM_LISTDELETE,
    DM_LISTADD, DM_LISTUPDATE, DM_LISTINFO, DM_LISTFINDSTRING, DM_LISTINSERT
    DM_LISTSETTITLES, DM_LISTGETTITLES
    and corresponding structures.
[+] DM_RESIZEDIALOG - changes the dialog size.
[+] DM_GETCHECK/DM_SETCHECK/DM_SET3STATE/BSTATE_* - operations with
    the state of DI_RADIOBUTTON/DI_CHECKBOX elements.
[+] DM_EDITUNCHANGEDFLAG - allows to control the "unchanged state"
    flag for edit lines.
[+] Now mouse event notifications (DN_MOUSEEVENT) can be optionally sent
    to the dialog callback function. By default, mouse event notifications
    are disabled. (DN_MOUSEEVENT/DM_SETMOUSEEVENTNOTIFY).
[+] DM_GETITEMPOSITION, DM_SETITEMPOSITION - returns and sets the position
    and size of a dialog item.
[+] DM_SETCURSORSIZE, DM_GETCURSORSIZE - allows to control the cursor size
    for an edit line in the dialog
[+] DM_GETDROPDOWNOPENED, DM_SETDROPDOWNOPENED - allow to open and close
    combo boxes and history lists programmatically.
[+] DM_SETHISTORY - allows to change the identifier of the history list
    associated with an edit field.
[+] DN_DRAGGED - notifications about dialog movement
[+] DN_RESIZECONSOLE - notification sent when the size of the FAR console
    window changes.
[+] DIF_SEPARATOR2 - double separator line.
[+] If the flag DIF_LISTWRAPMODE is specified, trying to move the
    cursor up from the first item of the list or down from the last
    item will move the cursor to the last or the first item,
    respectively.
[+] Flags for the DialogEx function:
    FDLG_WARNING - Changes the color scheme of the dialog to the "Warning"
    color scheme.
    FDLG_SMALLDIALOG - Allows to create dialogs with reduced border size.
    For such dialogs, the kernel doesn't draw the dialog background and
    the shadow, and when drawing separators (DIF_SEPARATOR), it is
    assumed that there is no space between the dialog border and the
    double box framing the dialog.
[*] DIF_SHOWAMPERSAND also has effect for DI_BUTTON, DI_CHECKBOX,
    DI_RADIOBUTTON.
[*] Changed the handling of DN_MOUSECLICK outside the dialog borders
    by the standard dialog callback function. Now, if the dialog
    callback function doesn't handle DN_MOUSECLICK with Param1=-1,
    the dialog will be closed.
[*] Now DI_LISTBOX items having the flag DIF_LISTNOBOX and menus having
    the flag VMENU_SHOWNOBOX are drawn without extra whitespace padding
    around the list, allowing to use DI_LISTBOX in dialogs and not worry
    about list box padding erasing the dialog border.
[-] The message DN_EDITCHANGE was not sent to the dialog callback
    function after an item was chosen from the edit history list.
[-] The message DM_SETTEXTLENGTH did not work correctly.
[-] The dialog item DI_USERCONTROL did not work correctly with the cursor.
[-] Fixed crash of FAR Manager that happened if a DM_SETFOCUS message was
    sent in response to a DN_GOTFOCUS event.
[-] The DIF_READONLY flag was not handled correctly.
[-] Coordinates of elements DI_TEXT and DI_VTEXT were calculated
    incorrectly.
[-] Elements with the DIF_NOFOCUS flag were handled incorrectly.

Miscellaneous
~~~~~~~~~~~~~
[!] Changes in FSF.MkTemp:
      - the function, unlike FAR 1.70 beta 3, does not create the file
        on the disk, but only generates the name;
      - the first four characters of the prefix are now used.
[!] The function FSF.ExpandEnvironmentStr works with strings in the
    OEM codepage.
[+] New flag EJECT_LOAD_MEDIA for ACTL_EJECTMEDIA.
[+] ACTL_GETWINDOWCOUNT,ACTL_GETWINDOWINFO,ACTL_SETCURRENTWINDOW and
    ACTL_COMMIT, struct WindowInfo - functions to manipulate the "windows"
    of FAR Manager.
[+] ACTL_POSTKEYSEQUENCE - post a sequence of keys to be executed
    later (when FAR Manager gets the control).
[+] ACTL_GETFARHWND - returns the handle (HWND) of the current FAR window.
[+] ACTL_GET*SETTINGS - commands allowing plugins to retrieve
    information about some FAR Manager settings.
[+] New function in FSF: MkLink. Supports creating hard links,
    symbolic links and mounting drives to the file system.
[+] The function FSF.ConvertNameToReal() converts a relative name of a
    file object to a full name and expands symbolic links (Windows 2000
    reparse points).
[+] New function FSF.GetReparsePointInfo()
    The function allows to obtain the information about the source of the
    specified symbolic link (the path to the source drive and directory).
    The function works only under Windows 2000 or later.
    Unlike ConvertNameToReal, this function can only be used for symbolic
    links.
[*] The Unquote() function removes all quotation marks from a string.
[*] FarRecursiveSearch has been improved:
    1. Added checks for invalid parameters.
    2. Now handling of directories does not depend on the file mask.
    3. All standard features of FAR file masks (brackets, enumerations)
       are supported. You may specify several file masks separated with
       commas or semicolons, you may also specify exclude file masks,
       masks can be enclosed in quotes.
[*] FSF.FarInputRecordToKey: The parameter now has a "const" modifier.
[-] The function GetMinFarVersion() was not called for plugins with
    the PF_PRELOAD flag and for the plugins that had been cached.
[-] When executing a macro in the menu, the values of the BreakKeys
    array passed to the Menu function were ignored.

---------------------------------------------------------------------------
FAR 1.70 beta 3 (build 591) (19.04.2001)
---------------------------------------------------------------------------
[+] DIF_VAREDIT - "breaking of the 512-byte barrier" - works for DI_EDIT
    and DI_COMBOBOX controls.

[!] [!] In plugin.hpp, the "const" modifier has been added for the
    unchangeable parameters of some exported and service functions. This
    gives the following advantages:
    1) additional compiler checking, preventing modification of
       parameters that must not be modified;
    2) facilitating code optimization (both for the compiler and for
       the programmer) by removing the need to track possible changes of
       the data passed into a function through a pointer.
    When recompiling plugins, please make sure that exported functions
    are declared correctly.

[!] Changed the FarListItem structure (possibility of working with "long
    data").

[+] Added flag LIF_PTRDATA - for working with "long data". The flag
    applies only to items in a DI_COMBOBOX list.

[!] Changed the values of LISTITEMFLAGS (LIF_*) - the values for
    LIF_SELECTED, LIF_CHECKED and LIF_SEPARATOR have been shifted to the
    lower byte of the upper word, and LIF_DISABLE has been shifted "down".

[!] Changed field names in the FarDialogItemData structure.

[+] It is now possible to handle a double click event through the
    DN_MOUSECLICK message (MouseEvent.dwEventFlags==DOUBLE_CLICK).

[!] Significant revamping of the internal key codes (farkeys.hpp).

[+] ACTL_EJECTMEDIA - ejects a disk from a removable drive.

[+] DM_GETTEXTPTR is similar to DM_GETTEXT, but Param2 contains
    a pointer to the receiver string.

[+] DM_SETTEXTPTR is similar to DM_SETTEXT, but Param2 contains
    a pointer to the source string.

[!] Ctrl-Break can now be controlled. Earlier the dialog was closed
    unconditionally, regardless of what the callback function
    returned on the DM_CLOSE message.

[+] The DIF_SHOWAMPERSAND flag can be used for DI_SINGLEBOX and
    DI_DOUBLEBOX items.

[-] Calling the ECTL_SETKEYBAR command from the EE_READ editor event
    handler crashed the FAR manager.

[+] ACTL_KEYMACRO:
    struct ActlKeyMacro - the interface part for ACTL_KEYMACRO
    MCMD_LOADALL     - load all macros from the registry into the FAR
                       memory
    MCMD_SAVEALL     - save all macros from the registry into the FAR
                       memory

[-] The input focus was not set correctly when using DM_SETDLGITEM.

[+] DIF_HIDDEN - makes a control invisible

[+] DM_SHOWITEM - show or hide a control

[!] Extended the syntax of the Message function (see Plugins.hlp for
    details).

[-] The message EE_REDRAW was not sent after pressing Ctrl-P and Ctrl-M in
    the editor.

[*] If the dialog callback function returned FALSE in response to a
    DN_DRAWDIALOG message, the entire dialog will not be drawn.

[*] If the dialog callback function returned FALSE in response to a
    DN_DRAWDLGITEM message, the dialog item will not be drawn.

[+] FSF.qsortex - unlike FSF.qsort, passes a third parameter to the compare
    function:
    void qsortex(void *base, size_t nelem, size_t width,
           int (__cdecl *fcmp)(void *, void *,void *userparam),
           void *userparam);

[+] New flag EF_CREATENEW for the Editor function - analog of Shift+F4

[!] FSF.FarRecursiveSearch - added parameter void *param

[+] FAR knows about 4 predefined help topics in HLF files:
    Contents - the standard main topic;
    Config   - the topic invoked by pressing Shift-F1 in the plugins
               configuration menu;
    Editor   - the topic invoked by pressing Shift-F1 in the plugins menu
               of the editor;
    Viewer   - the topic invoked by pressing Shift-F1 in the plugins menu
               of the viewer.

[+] New flag FHELP_USECONTENTS for the ShowHelp function - if the given
    topic is not found, shows the topic "Contents".

[*] ACTL_GETFARVERSION returns the version number, and not TRUE/FALSE. NULL
    can be passed in the Param parameter.

[*] ACTL_WAITKEY waits for any key if NULL or -1 is passed in the parameter
    Param.

[+] ECTL_SETPARAM - allows to set editor parameters:
     - Tab size (ESPT_TABSIZE)
     - Expand tabs to spaces (ESPT_EXPANDTABS)
     - Auto indent (ESPT_AUTOINDENT)
     - Cursor beyond end of line (ESPT_CURSORBEYOUNDEOL)
     - The format of the current character code (ESPT_CHARCODEBASE)

[-] If the user tried to edit a read-only file and cancelled the editor when
    a warning dialog appeared, plugins that processed editor events received
    an unneeded event EE_CLOSE.
    Fixed.

[+] New message DM_ADDHISTORY - adds an item to an edit line history.

[+] New flag DIF_MANUALADDHISTORY - disables automatic adding of
    items to an edit line history.


---------------------------------------------------------------------------
FAR 1.70 beta 2 (build 321) (16.12.2000)
---------------------------------------------------------------------------
[!] Plugins.hlp - contains clarifications in some articles.
[!] Changes in Param2 for messages DM_SETTEXT and DM_GETTEXT.
    Now they use pointers to FarDialogItemData structure.
[-] It was not possible to read the help file in operating systems with
    a locale different from 419 (Russian).
[-] The operation logic of disabled controls in extended dialogs has been
    corrected.
[+] 6 new colors are added for DISABLED items (in dialogs and warning
    messages). See Headers.c\farcolor.hpp (or Headers.pas\farcolor.pas).
[+] DIF_3STATE - 3-state checkbox (on=1/off=0/undefined=2)
[!] The DIF_EDITEXPAND flag is no longer processed by DI_PSWEDIT and
    DI_FIXEDIT controls.
[+] ACTL_GETCOLOR, ACTL_GETARRAYCOLOR - return current color settings.
[-] The logic of Enter key is corrected in extended dialogs.
[!] The AddEndSlash function works with both types of slashes and replaces
    the existing trailing slash with the type of slashes that was used
    more often.
[*] The function memmove() is now used to convert FarDialogItem.Data to
    the internal representation (this prevents the loss of user data).
[!] The version format changed - the constant in plugin.hpp::FARMANAGERVERSION
    has the following format:
       HIWORD:         = NNN - # build
       LOWORD:  HIBYTE =   1 - version Hi
                LOBYTE =  70 - version Lo

---------------------------------------------------------------------------
FAR 1.70 beta 1 (272) (21.11.2000)
---------------------------------------------------------------------------
[!] New/changed header files:
       farcolor.hpp  - Color attributes indexes.
       farkeys.hpp   - FAR manager internal key codes.
       fmt.hpp       - is moved from MultiArc.
[!] Alignment = 2.
[+] "Standard functions" - for reducing plugins size -
     the FarStandardFunctions structure.
[+] New export function - GetMinFarVersion().
[+] URL-activators and color attributes in HLF-files.
[+] New standard functions:
    AdvControl, ShowHelp, InputBox
[!] A plugin can have several command line prefixes, separated with ":"
    and use full command line processing (with prefix) - PF_FULLCMDLINE.
[+] processing of FCTL_*SORTMODE, FCTL_*SORTORDER.
[!] Changes in PluginStartupInfo structure.
[*] Changed the behavior of EE_REDRAW.
[+] Additional fields in the KeyBarTitles structure:
    CtrlShiftTitles, AltShiftTitles,  CtrlAltTitles.
[+] Non-modal editor - flag EF_NONMODAL.
[+] Setting the key bar in the editor - ECTL_SETKEYBAR.
[+] Dialog API 1.0 - a full-featured solution for creating dialogs:
    DialogEx, SendDlgMessage, DefDlgProc.
[+] New dialog items DI_COMBOBOX, DI_LISTBOX, DI_USERCONTROL.
[+] DIF_EDITEXPAND, DIF_DROPDOWNLIST, DIF_USELASTHISTORY, DIF_BTNNOCLOSE,
    DIF_MASKEDIT, DIF_DISABLE.
[+] Input fields with fixed length can have an input mask.
[+] Additional field in PluginInfo structure.
[+] Structures: FarListItem, FarList.
[+] Header files for Pascal/Delphi


                                     [ FAR manager development group ]
