
Version 55
----------

 - the history file is started

 - get_name() and similar functions have two additional parameters:
        char *buf, size_t bufsize
   i.e. they return their answers in the specified buffer, not in
   a static buffer anymore

 - all processor modules should call invoke_callbacks() from their
   ph.notify function. See the sample file, reg.cpp.

 - sel_t type is 32-bit now (before it was defined as ushort)

 - plugin init/term() functions are called only once for each plugin.
   before they we being called for each menu entry

 - a plugin can return PLUGIN_KEEP from his init() function. In this
   case the plugin will stay in the memory. otherwise it is unloaded
   and loaded again only when the user invokes it.

 - notification callback functions are added

 - enumerations can have several constants with the same value
   to distinguish them we use "serial" numbers. Each constant in the
   enumeration has a serial number. Usually the serial number is equal
   to zero. If there are 2 constans with the same value, their serial
   numbers will differ. The serial numbers are allocated by the kernel
   when a symbolic constant is created. The kernel allocates the serial
   numbers starting from zero (0,1,2,3...) The maximum value for a serial
   number is 255.
   The interface to the enum oriented functions have been changed to
   include the serial numbers.

 - user-defined line prefixes are supported. see get_user_defined_line_prefix()
   and the sample plugin (vcsample).

 - The following functions have been renamed (the list is not exhaustive):
   itemEnd() -> get_item_end()
   getSize() -> get_item_size()
   doUnknown() -> do_unknown(), do_unknown_range()
   add_segm -> add_segm_ex
   set_refinfo -> set_refinfo_ex
   set_ti -> set_op_ti
   get_ti -> get_op_ti
   add_func -> add_func_ex
   apply_idasgn -> apply_idasgn_to
   autoMark -> auto_mark_range
   set_name -> set_name_ex
   set_name -> set_dummy_name
   doData -> do_data_ex
   QueueGet -> QueueGetType
   chsize -> echsize
   btoa -> btoa32, btoa64, btoa128
   b2a -> b2a32, b2a64
   atob -> atob32, atob64
   get_const -> get_const_by_name

 - The Visual C++ compiler can be used to write plugins.
   See the samples in the SDK.

 - A plugin can extend the processor module capabilites by intercepting
   custom_... callbacks. See the sample (procext).

 - CBuilder VCL components can be used in the plugins. See plugins\chart.


Version 56
----------

- is_spec_ea() doesn't pay attention to inf.s_specsegs

- AskUsingForm() with buttons was broken

- segment translation functions don't work with the segment selectors
  anymore. In order to break the old code using them, these functions
  are renamed: anyway the code should be revised.

- new processor_t.flag bits (please check your modules and add these
  bits if you need them):
#define PR_BINMEM     0x10000   // the processor module provides correct
                                // segmentation for binary files
                                // (i.e. it creates additional segments)
                                // The kernel will not ask the user
                                // to specify the RAM/ROM sizes
#define PR_SEGTRANS   0x20000   // the processor module supports
                                // the segment translation feature
                                // (it means it calculates the code
                                // addresses using the codeSeg() function)

- choose2() function has one more additional optional parameter

Version 4.18
------------

- PR_BINMEM is not used anymore


Version 4.20
------------

- ieee_realcvt() function is added

- AS2_STRINV is added

- choose_ioport_device() has 2 parameters

- better handling of inf.wide_high_byte_first

- OutValue(..., OOF_ADDR) accepts dt_code as dtyp.

- 0x80, 0x8000, 0x80000000 are considered as signed by default in OutValue()

Version 4.21
------------

- set_dummy_name has 2 parameters

Version 4.3
-----------

- search.hpp is included

Version 4.5
-----------

+ IDA environment variable is not required to build modules anymore
+ added comments about filling the op_t structure; fixed some typos in netnode.hpp
+ COLOR_INV is added
+ hidden plugins are supported: PLUGIN_HIDE flag is introduced
+ idaw choose() function respects the batch mode
+ negative buffer sizes are handled properly (str2user, user2str, pack_ds)
+ new function flag FUNC_BOTTOMBP. It means that the frame pointer is equal to the stack pointer in the function and it points to the bottom of the stack frame.
+ ph.flag PR_CHK_XREF: don't allow near xrefs between segments with different bases. This flag is used for IBM PC only.
+ read_ioport_device() function reports about configuration files with no devices
+ renamed FIXUP_PTR32->FIXUP_PTR16, FIXUP_PTR48->FIXUP_PTR32
+ the user-defined data supplied to linearray_t is documented in kernwin.hpp
+ up to 16 source files for plugins
+ setBreak() function is added
+ the processor extension callbacks are called for all instructions, not only when cmd.itype >= CUSTOM_CMD_ITYPE
+ find_ioport_bit() returns NULL is the bit name is NULL
+ rebase_program() is added. This function allows to shift the whole program in the memory. Since rebasing the program involves correcting the relocated bytes, the file loader takes part of the job. File loaders may have "move_segm" callback functions now.
+ now a good behaving procesor module handles the ph.move_segm event
+ numop2str(): output instruction operand with optional leading zeroes; is_lzero(),toggle_lzero() to modify the display of leading zeroes; inf.s_genflags introduced; atoa, b2a32, b2a64, b2_width function parameters has been changed
+ move_segm_start(), set_segm_start(), set_segm_end() may destroy the adjacent segment if necessary; ADDSEG_QUIET flas has been added
+ new type of segments: SEGM_DEBUG. Used in the debugger.
+ get_sourcefile() function prototype has been changed. Now it returns the range information.
+ hidden_area_t and functions to work with it are introduced
+ byteValue() function is renamed to _byteValue(); this function should not be used anymore if possible. The reason is that it works only with 8-bit processors and doesn't take into account possible debugger side-effects.
BUGFIX: qmakepath() could generate file names with several backslashes in them

