2015-08-11 write instruction bug fix
	* write instruction:
	- The instruction returns now a PIPE interruption instead of receiving
	  a SIGPIPE that stops the machine, on sockets and pipes.
	* vim support:
	- Refactoring the vimfiles at installation time.
	- Adding core syntax support.

2015-08-09 Memory leaks and refactoring
	* Memory leaks:
	- The six parsers should not leak now when an error occurs.
	* send and receive:
	- Compilation warning suppressed.
	- Small refactoring on message headers.

2015-08-07 Send and receive bug fixes
	* receive send a reply on syntax error:
	- Now, :receive will not send a reply on a passive media based stream.
	* Message block size warning:
	- Warning suppressed by explicit conversion.
	* Interruption swap:
	- An invalid expression will raise an ABRT.
	- An invalid size in fixed read mode will raise an ILL.

2015-08-06 Send and receive instructions
	* Introduction of send and receive instructions:
	- Those instructions allow reliable memory transfert between virtual
	  machines.
	- It can be used for uniformed messaging in a grid of VMs.
	* API add-on:
	- Two functions has been added to control what :return :delete will
	  free in the plugin API. Use with care, as it is internal functions.

2015-08-03 Fixed read integrated to the core
	* Fixed read:
	- The fixed_read instruction has been removed from the stream plugins.
	- The :read and :wait < instructions now accept an integer (or an
	  integer read from the database). If the number is positive, the
	  instructions perform a read up to the given size.
	- Plugin interface updated as well, with an extra parameter to the
	  read function.

2015-07-23 Machine bug fix and wrapper feature
	* Installation script:
	- The setlgg_wrapper command output is now /bin/sh compatible, to be
	  integrated in installation scripts.
	- Four new options of the command produce the basic code to avoid
	  boiler plate code in the developer install script.
	* Machine core dump:
	- The machine cored when the memory file could not be created.
	  It replies now with an error.

2015-07-22 New wrapper feature
	* Local/System installation modes:
	- Without options, the wrapper will create the script as usual.
	  {Local mode}
	- With options, the wrapper will try to generate a wrapper script
	  assuming locations passed by options. {System mode}
	- Invocation with Shebang not supported in system mode.

2015-07-21 New wrapper feature
	* Local script:
	- The wrapper accepts now a shortened syntax suitable for local
	  scripts.

2015-07-20 Bug fix on plugin example
	* plugin.tar.gz:
	- The dependencies of plugin.tar.gz are now correct.
	- The tarball is no longer distributed, and is generated at build
	  time.
	- The plugin has all files distributed now.

2015-07-19 New functionality and plugins improvements
	* return delete feature:
	- Introduce the :return :delete feature, deleting allocated memory
	  while returning from a function.
	* envvar plugin:
	- The official plugin envvar is now documented in the manpages.
	* dummy plugin:
	- The example plugin delivered with the virtual machine contains now
	  a test with a code using the plugin.

2015-07-17 bug fix and new feature on :exec 
	* bug fix:
	- The checks :readable and :writable did not take in account the
	  :close > and :close < instruction. It is now the case.
	* exec instruction:
	- The :exec instruction now accepts a second IOR as optional argument.
	  This second stream is connected to the standard error of the
	  external command.

2015-07-16 :exec file handling
	* exec instruction:
	- The file handling was buggy, and is now repaired using several dup
	  system call on a pipe.

2015-07-15 :exec file handling
	* exec instruction:
	- The instruction will now close all non system (stdin, stdout,
	  stderr) file handler, to avoid interference. The process will have
	  to reopen the handlers on themselves.

2015-07-14 :exec bug fix
	* exec instruction:
	- The instruction did not work properly when :stdin or :stdout was
	  explicitely closed before the instruction. It is now corrected.

2015-07-10 New instruction variant
	* close instruction:
	- The instruction :close accepts now two optional arguments working
	  only on pipe tube media based streams.
	- :close > $stream will not destroy the stream, but closes the write
	  pipe of the stream.
	- :close < $stream will not destroy the stream, but closes the read
	  pipe of the stream.

2015-07-09 Bug fixes
	* Official plusgins:
	- Several memory errors detected and corrected
	* Stream read:
	- Some issues due to input buffer management. Every write to the input
	  buffer are now preceded by a position change of the cursor to the
	  end of the input buffer.

2015-07-06 Bug fixes
	* Checkpoints:
	- Checkpoints were transmitted between frame. They are now cleaned on
	call.
	- Test :reached was incorrect with :unless. Factorisation of the
	:unless test to solve this.
	* Debugger directives:
	:current was not accepted as the current address. It is now corrected.
	* Breakpoints on interruptions:
	Breakpoints were not tested right after an interruption handler call.
	Now corrected.

2015-07-05 Interruptions and checkpoints
	* Interruption change:
	The instruction :interruption will push and pop interruption handlers
	instead of replacing it.
	* Checkpoints:
	This new feature is a set of named flags at CPU state level. This
	feature is mainly added to:
	- Have conditional jumps on the same assembly functions without
	  touching the memory,
	- Return to a certain level of the stack when a :return 0 is done.

2014-10-13 Bug fix
	* Processor:
	The new API functions on the processor allow a hot CPU change, but
	the signals were not updated. It is the case now.

2014-10-12 API enhancements
	* Memory:
	The memory can now be:
	- compiled from a string,
	- manipulated like programs with load/reset/save.
	* Processor:
	The processor can be manipulated like programs with load/reset/save.
	* Bug fixes:
	- One leak suppressed in memory compiler.
	- Some invalid values are forced to 0 in some functions.

2014-10-11 Several bugfixes/enhancements
	* Documentation fix:
	The :wait instruction documentation was a bit outdated. It is now
	correct.
	* New official plugin:
	The envvar plugin has been added, to access to the unix environment
	variables.
	* Plugin interface changes:
	- The functions defined by the plugins can now return null values.
	- Functions setlgg_machine_internal_program_size,
	  setlgg_machine_internal_program_find_label,
	  setlgg_machine_internal_memory_current added
	- Function setlgg_machine_internal_memory_uninitialise_address and
	  setlgg_machine_internal_memory_uninitialise_alias renamed into
	  setlgg_machine_memory_uninitialise_address and
	  setlgg_machine_memory_uninitialise_alias, as the :clear instruction
	  has been added.
	* Plugin example:
	Default include file corrected.

2013-11-22 Stream buffer refactoring and streams plugin change
	* Stream buffer refactoring:
	The stream buffer for read operation had some issues with seek and
	write operations. To avoid issues, the buffer is systematically
	emptied after a read or a wait on a seekable stream, and the
	read/right pointer is moved to the begin of the extra buffered data.
	* Plugin interface change:
	The function setlgg_machine_internal_stream_buffer_put has been
	removed, as it could desynchronise the read/write pointer of the file
	and the virtual one used for the read and write operations.
	* Documentation change:
	The fact that a read buffer exists is now mentioned in the manpage of
	the virtual machine.
	* Streams plugin change:
	The :string_stream now open a stream based on anonymous pipes to
	handle strings with stream facilities. The corresponding stream has
	all limitations of pipes, like blocking at read and write time.
	* Plugin example bug fixes:
	- The plugin.c source file raised a warning. It is now corrected.
	- The integration did not permit to compile a plugin outside the
	  source directory. It is now corrected.

2013-11-21 Documentation update and :seek integration to the read cache
	* Documentation update:
	- :string_stream instruction is now documented with :seek command
	  issue,
	- A warning was missing about the setlgg_machine_internal_stream_\\
	  buffer_put function in the plugin
	  interface explaining the compatibility issue between the use of this
	  function and :seek.
	* Read cache integration with the seek instruction:
	The :seek instruction takes now in account the cache used to read into
	streams to computes relatives moves into the stream.

2013-11-20 Plugin interface bug fixes and huge changes
	* Plugin interface bug fix:
	- Streams plugin had a wrong call to delete. It has been replaced by
	  delete [],
	- The function that creates new IOR values in the API did not care
	  about the cases of :stdin, :stdout and :stderr, as the name of the
	  stream could lead to undefined results. It is now fixed.
	- The instruction :fixed_read returned false values when associated
	  with the core :read instruction due to buffering. The :fixed_read
	  instruction now extracts data from the buffer before read the stream
	  itself.
	* Plugin interface changes:
	- All types have been prefixed by SetLgg_Machine_ to avoid C symbol
	  collision,
	- Strings are no longer C strings, but sized strings, allowing usage
	  of the null character in the buffer. The strings given by the
	  virtual machine in the instruction parameters can be safely used as
	  C strings, but it is the only case where it is longer possible,
	- Some preprocessor macros have been added for C++ convenience on
	  sized strings, and all API functions has been converted to sized
	  string parameters. For convenience, some basic functions remain
	  with the char* flavour, but a version with sized string is always
	  available,
	- :fixed_read instruction has been changed to support sized string for
	  its return value,
	- All official plugins and the example plugin have been migrated,
	- Two internal functions added on streams: the read buffer can be
	  manipulated in a low level manner.
	* Plugin stream:
	Instruction :string_stream added. This instruction takes a string and
	pushes it in front of a read stream referenced by an IOR.

2013-11-19 C++ warnings suppression
	* C++ warning suppression:
	- The debugger arrays where not formatted with the right format:
	  changed to C++ formatting.
	- The plugin interface was wrong about address storage. Changed from
	  unsigned int to size_t.

2013-11-18 Optimisation and debugger bug fix and interface change
	* Memory copies removed from expressions:
	The expressions returned a value that was copied into the memory. The
	expressions now generate always a temporary value (even by copying
	explicitly its argument) and avoid a systematic copy when the value is
	written to the virtual machine memory.
	The only drawback is the usage of a std::const_pointer_cast in the
	member function that writes the value to the memory. It allows
	constness consistency check on the evaluation of expressions and
	assign the result value without copying it.
	The optimisation gain is between 2% and 4%.
	* Debugger bug fix:
	The debugger computed incorrectly the number of executed instructions.
	It is now displayed with the correct value.
	* Debugger interface change:
	- I added the go command, that exits the debugger and runs the
	  program without the debugger. The quit command now exits the
	  debugger and terminates immediatly the program execution.
	- Commands wra, wrv, da, dv, int and g are disabled when the program
	  execution is terminated.

2013-11-17 Optimisation
	* Memory address computation:
	Memory address computation do not generate memory allocations on the
	heap, leading to a 8% faster run.

2013-11-17 Bug fix, optimisations, strings plugin update, and debugger change
	* Bug fix:
	In the plugin interface, a read to an uninitialised address was not
	catched, and terminated the run of the plugin instruction. The read
	functions now returns with a specific return error code.
	* Optimisation:
	A call to an instruction in a plugin passes the parameters by copy. I
	used ::strdup() to perform the copy, but this function recomputes the
	size of the string (and potentially copy only a part of the string)
	before copying it. The duplication is now performed by a ::malloc and
	a ::memcpy.
	* Debugger change:
	The sonde in the debugger now counts how many instructions have been
	executed, and displays it at the end of the run of the program.
	* Plugin interface change:
	- Now, only ::setlgg_machine_memory_delete returns INVALID_ADDRESS,
	  other functions return UNDEFINED_MEMORY when the address is not
	  defined and UNINITIALISED_MEMORY when the address is defined but
	  no value is present.
	- I added a function to access to the regular expression cache from
	  the plugin, to avoid recompilation of expressions even in plugins.
	* Strings plugin change:
	- All instructions uses the regular expressions cache.
	- I added :strings_token to the plugin strings, but I do not
	  recommand its usage, as it slower than / and % usage on the same
	  regular expression.

2013-11-16 Corrections for compilation with g++ 4.7
	* Wrapper:
	Options generation and update classes have no virtual destructors. I
	added them with default implementation.
	* Optimisation of expressions and addresses:
	I tried to remove the shared_ptr and use self developped ephemeral
	smart pointers, but the speed up was not significant, and has been
	fallen back.

2013-11-14 Optimisation of STR/STR and STR%STR
	* Cache of regular expressions:
	To avoid recompilation of regexes, a cache of compiled regex is kept
	as a singleton to share the regex compilations. When the cache size is
	above 3000, a cleanup mechanism is put in place to avoid cache size
	explosion. Every 10000 regex compilation attempts, the cache is purged
	of the less used regex using a basic algorithm.  On one program using
	heavily the regular expressions, the execution time has been divided
	by 2.5.
	* Compilation error fix:
	In the wrapper, one ::write instruction return value was not checked.

2013-11-13 Plugin streams bug fix, lexers fix, character escaping, file modes
	* fixed_read instruction:
	The instruction returned a string with garbage when an EOF is reached
	before the given size. It returns now the truncated STR properly.
	* Lexers fix:
	All lexers had a problem with strings terminated by \\ generated
	syntax errors, as the escaping ignored the final double quote.
	* Character escaping:
	Tabulation added to escaped characters with the traditional \t.
	* File modes:
	The files are now opened with specific flags:
	- Read only files will not be created,
	- Read/write files will be created,
	- Write only files will be created or truncated,
	- Write append files will be created and have their cursor at the end
	  of the file by default.

2013-11-12 Compilation issue and bug fix
	* Official plugin streams:
	Compilation failed due to a missing header inclusion. Fixed.
	* read ALL instruction:
	When the stream was empty, the instruction returned a null string. It
	returns now an empty string instead.

2013-11-09 New plugin, documentation minor update and coredump change
	* Streams plugin:
	This plugin has been integrated into official plugins to provide a
	fixed read operation on streams.
	* Dynlib plugin:
	Some memory leaks on errors has been removed.
	* Wrapper script:
	The script now allows to provide a command before the virtual machine
	is launched.
	* Documentation update:
	The email addresses are now taken from the configure.in file.
	* Coredump change:
	The version of the virtual machine is included in the coredump to ease
	further investigations on third party bug report.

2013-11-08 Pointer comparison and documentation update
	* Pointer comparison:
	The = and <> operators accept as arguments values in memory that
	contains PTR types and compare the addresses. A raw address in
	argument is still forbidden.
	* Documentation update:
	The documentation refers = and <> operators for pointers, and refers
	to other man pages.
	* Syntax color:
	TODO and FIXME added in setlggasm, and setlggwrp can now by
	highlighted in Vim.

2013-11-07 Dynamic linker documentation
	* DynLib documentation:
	The dynlib documentation has been added to the plugins manpage.
	* Plugins manpage:
	The mail address has been corrected.

2013-10-21 Debugger command line usability and enhanced break point support
	* Debugger inline help:
	The access to the help menu is now highlighted at the debugger
	startup.  The shortcuts of the commands are now on the main help menu,
	and the information displayed at the bottom of the main menu is more
	complete.  An invalid command invites to enter the help command.
	* Debugger display:
	The display changed a bit, the prompt is now preceded by a line to
	separate each command and its result.
	* The debugger accepts breakpoints on unknown symbols and files:
	When a bs or a bf command is entered in the debugger command line, the
	debugger will raise a warning if the symbol or the line is unknown,
	but accepts the breakpoint with an empty address.  In such state, the
	breakpoint is inactive and will never stop the execution.  Each time
	the setlgg_machine_internal_program_append() function is called, the
	debugger will refresh all breakpoints, changing addresses and
	activating breakpoints on new symbols and lines.

2013-10-20 Dynamic libraries support in the debugger
	* The debugger was blind on shared libraries code:
	The debugger now loads the directives of compiled programs in plugins.
	I had to split the analyser of the debugger in two parts to do this,
	one for the directives, one for the command line. The debugger still
	can not add a break point before the code load. A workaround is to
	call the virtual machine with a debug command line that take this in
	account.

2013-10-14 Fixing minor bugs
	* Wrong value in coredumps:
	When a coredump is generated after a :call or a :goto instruction, the
	current instruction address was not relevant.  The value is now set at
	the jump instruction address.
	* Wrong display in the debugger:
	When values were larger than column sizes in arrays, the value was
	truncated. Now, a < or a > is added in the column margin to indicate
	that the value is longer than displayed.
	* Memory leak:
	A memory leak in the machine happens when the :open instruction needs
	to resolve a domain name. It is a simple block leaked once by the
	system call getaddrinfo.  The leak is suppressed from the valgrind
	output by the setlgg_machine.supp file.
	* Changelog:
	I just reversed the order of the news, the newest one is now at the
	top of the file. I also reformat the oldest news.

2013-10-13 Adding the dynlib plugin, improving API and correcting bugs 
	* DynLib plugin:
	This new official plugin allows usage of dynamic libraries.  Please
	refer to the dynlib.h file for details.
	* API changes:
	The setlgg_machine.h header has changed:
	- introduction of setlgg_machine_return_value_delete to clean up
	values returned by the API functions,
	- introduction of setlgg_machine_internal_stream_name to improve error
	messages on streams,
	- all functions on streams accept an InOutReference instead of a char*
	for stream names.
	The program input has changed:
	- when the program is read on stdin, the file descriptor is no longer
	closed. It allows input and debugging when the program is from stdin.
	Some instructions have changed (still backward compatible):
	- :call and :goto accept now a string as label and perform dynamic
	linkage on this string.
	* Bug fixes:
	The user instructions accept now IOR in their parameters.

2013-10-12 Adding dynamic jumps and calls
	* Dynamic jumps:
	:goto and :call instructions accepts a read into the memory instead of
	a label. This read shall be on a value of type STR.  The instructions
	reads the memory, searchs for a label corresponding to the value and
	jump to the address associated to the label. An error is raised if the
	value is not an STR or if the label does not exists.

2012-12-22 First release of the set language virtual machine
	* First release \o/:
	Including documentation and two small plugins.
