2014-04-23 Kamil Ignacak
	* committing changes before a new release; the new release
	contains a fix of problem reported by Pino Zollo ZP4KFX. Se NEWS
	file for more details.

2013-12-08 Kamil Ignacak
	* cwgen: improving seed for random function.

2013-10-26 Kamil Ignacak
	* clocking of iambic keyer. There has been a problem with clocking
	iambic keyer when the state machine for the keyer was in
	motion. The clocking has been receiving imprecise timestamps, and
	so recognizing characters (e.g. in xcwcp's receiver) was
	difficult.  Today I've committed code that fixes timing problems
	in clocking iambic keyer.

	The code updates receiver's timer with lengths of dequeued tones
	in cw_generator_dequeue_and_play_internal(). Receiver uses this
	updated timer as an argument to cw_{start|stop}_receive_tone(),
	and since the timer is updated with exact time values, the lengths
	of spaces and marks are more precise. Fixing the problem also
	required some changes in xcwcp/receiver.cc and
	xcwcp/application.cc.

2013-10-22 Kamil Ignacak
	* unit tests: adding first unit test in cwutils/dictionary module.

2013-10-19 Kamil Ignacak
	* unit tests: adding "tests::" and "testedin::" markings in
	functions' top level comments to indicate which functions are
	tested in which unit tests. Also rewriting parts of bodies of unit
	tests in libcwtest.c so that printout of test results is a bit
	cleaner.

2013-10-17 Kamil Ignacak
	* xcwcp: reviewing, commenting and reformatting code in
	receiver.cc - the file that uses libcw's receiver functionality.

2013-10-13 Kamil Ignacak
	* receiver code: more changes and reviewing of receiver code. Unit
	tests for two functions in recever section:
	cw_timestamp_validate_internal() and
	cw_timestamp_compare_internal().  I've reversed order of arguments
	for the first function, so the order now matches (output, input)
	pattern of parameters order.

2013-10-10 Kamil Ignacak
	* testing: some improvements in code testing receiving functions
	in libcwtest.c: simplifications, comments, refactoring.
	* refactoring in libcw.c: moving some free variables related to
	sending and receiving of Morse code into generator and receiver
	variables, respectively.

2013-10-06 Kamil Ignacak
	* tone queue: using "len" property to simplify management and
	monitoring of tone queue and its capacity. Code is now a bit
	simpler.

2013-10-05 Kamil Ignacak
	* tone queue: adding "len" property to tone queue. Adding and
	using it should simplify some aspects of queue management.

2013-10-04 Kamil Ignacak
	* tone queue: still working with capacity, head and tail. Updated
	data type for the three variables, it will be uint32_t.
	* debugging: introduced cw_assert() macro that should improve
	debugging and assertions.

2013-09-12 Kamil Ignacak
	* tone queue: more changes related to "capacity", and additionally
	"head" and "tail" properties of tone queue. No functionality
	changed yet, just some minor improvements, comments and tests.

2013-09-09 Kamil Ignacak
	* tone queue: refactoring code handling "capacity" of tone queue;
	two purposes: improved "testability" and possibility of assigning
	non-default capacities of tone queues.

2013-07-24 Kamil Ignacak
	* FreeBSD patches: applying patches for FreeBSD, provided by Diane
	Bruce (thank you!). Thanks to the patches the ./configure script
	now should support two new flags:
	--with-qt-includes=<path>
	--with-qt-libraries=<path>

2013-03-18 Kamil Ignacak
	* fixes: Thomas Beierlein has reported that some combinations of
	'--enable-*'/'--disable-*' flags result in a code that fails to
	compile. He also provided a  patch that fixes it. I've created
	a tool ('unixcw/tools/test_configure_flags.sh') that tests all
	combinations of configure flags, which also detected one more
	faulty configuration, in addition to the ones discovered by Thomas.

2013-01-24 Kamil Ignacak
	* unit tests: src/libcw/libcwtests.c has been heavily refactored.
	The work on the file will continue to ensure that public API of
	libcw is tested as thoroughly as reasonably possible.
	* new functions: adding new functions: cw_character_is_valid()
	(replaces cw_check_character()) and cw_string_is_valid()
	(replaces cw_check_string()). The old functions are still available,
	but have been marked as deprecated.

2013-01-03 Kamil Ignacak
	* fixes: fixing a function in libcw that attempts to open audio
	device. Simple improvement of logic conditions makes it less
	possible (under certain circumstances) that the function will fail
	to open a device.
	* pre-release: new version of unicw will have version number
	3.2.0.  New version of libcw will have soname version 5.0.0.
	Implementing necessary changes related to the two pieces of
	information. Also attempting to build debian packages from unixcw
	source package, and fixing bugs and upgrading files in the
	process. Various other updates of files related to pre-release
	activities.

2012-12-31 Kamil Ignacak
	* distribution: src/libcw/libcw_debug.h is now marked as file to
	be installed along with libcw.h
	* generator: improved behaviour of cw_generator_new() in cases
	when the function failed to create a generator. Now if the
	function fails, the generator variable is fully 'de-initialized'.

2012-12-29 Kamil Ignacak
	* tone queue: improving the method of queuing a space character.
	This helps me avoid problems in some corner case (when a single
	space is queued, and tone queue's low watermark is set to 1).
	This problem has been spotted when testing cwdaemon.

	* compilation errors: unixcw/src/libcw/libcw.h: Rewriting three
	cases of usage of "__attribute__ ((deprecated(msg)))", some
	versions of gcc may not support "deprecated" with string argument
	(error reported by user).

2012-11-21 Kamil Ignacak
	* debugging: I have reviewed list of CW_DEBUG_* flags. Some of the
	names of the flags have changed. If you are using any of these flags,
	you need to review your code.

	debug module now provides updated macro printing debug messages.
	The macro now accepts 'severity level' flag (debug / info /
	warning / error).  There are now three permanent debug objects
	provided by libcw. Two of them are only for debug purposes, the
	third one is for general use. Behaviour of the objects may be
	controlled by the severity flag, as well as by debug flags
	defining areas of code, for which the debugging is active.

2012-09-17 Kamil Ignacak
	* libcw: code implementing support for various audio backends has
	been moved from libcw.c to new files. That way we have less mess
	in libcw.c, better separation of modules, and cleaner space for
	improvements in code implementing support for audio backends (e.g.
	advanced API of PulseAudio).

2012-09-11 Kamil Ignacak
	* debug: adding src/libcw/libcw_debug.py - a tool that transforms
	timing information that may be printed by debugged libcw
	applications.  The transformed timing information may be then
	plotted by plotting programs to gain insight into inner workings
	and time dependencies of different parts of libcw applications.
	The tool is rather imperfect and may need manual adjustments for
	every new situation, but hopefully it will turn out to be useful.
	* cwcp: refactoring cwcp.c, adding comments, fixing one small
	annoyance.

2012-08-15 Kamil Ignacak
	* tone slopes: libcw now can generate tones with slopes shaped as
	sine function or as raised cosine function. The 'raised cosine'
	slope is now default. Until now, shape of slopes has been calculated
	every time a tone has been generated. Now the shape is calculated
	only when some parameters of generator (volume, sample rate, length
	of slope) change. This should improve performance of libcw by one or
	two percents (no benchmarks were performed :/ ).

2012-08-11 Kamil Ignacak
	* debug: Adding src/libcw/libcw_debug.c module. Currently the module
	implements only debug events with time stamps, but most probably all
	debugging facilities will be moved to the module in future.

2012-08-06 Kamil Ignacak
	* build system configuration: fixing faulty logic checking
	"--disable-feature" flags in configure.ac. Bug reported by Thomas
	Beierlein. Thanks Thomas!

2012-07-04 Kamil Ignacak
	* libcw: fixing problem with interlocks in threaded code; since
	this is an important fix, I will have to prepare new release of
	unixcw.

2012-05-27 Kamil Ignacak
	* libcw: fixing an error with overflowing n_samples. It was spotted
	during some tests performed when reviewing files before new release.
	I guess that means that I'm in a phase of final tests of the package.
	* unixcw: bunch of changes that prepare the package for new release.
	New release number of unixcw will be 3.1.0, new soname of libcw will
	be 4:0:0.

2012-05-21 Kamil Ignacak
	* libcw: Implementing loading of PulseAudio and ALSA libraries at
	run-time (loading symbols from the two libraries - to be exact),
	instead of doing it at compile time (load time?).
	This means that support for PulseAudio and/or ALSA can be enabled
	during compile time, but user doesn't have to have PulseAudio and/or
	ALSA installed on target system in order to install libcw. In other
	words: PulseAudio and ALSA libraries are now recommended, but not
	required.
	This does not mean that the two libraries are somehow deprecated by
	libcw. It just means that installing libcw doesn't have to mean a
	necessity of installing too much additional packages.
	OSS - by its nature - doesn't have to be loaded to be used by libcw,
	it's just open(), write() and close(), so handling OSS is much
	easier and doesn't involve run time loading (the description is
	rather simplified, but still OSS is a different story than PulseAudio
	and ALSA libraries).

2012-05-17 Kamil Ignacak
	* libcw/pulseaudio: some general improvements in PulseAudio code;
	there may be a slight improvement in responsiveness, as I've added
	code that configures buffering attribute passed to pa_simple_new().
	The configuration is very simple (read: code copied from the net),
	I suspect that it can be improved.

	* libcw/Null: Adding support for Null output.
	Null output is an empty device that doesn't produce a sound. It
	doesn't use any physical or logical device to output a sound.
	Its only function is to provide a timing information: it acts as
	if it accepts and plays x microseconds of sound, and it returns
	after the x microseconds.
	I'm not sure if this will turn out useful, maybe yes, maybe no.
	Currently it is implemented using single call to usleep(), without
	any checks of return value. This should be improved.
	Code from cwutils has been changed to use/provide functionality
	related to the new output.

2012-05-14 Kamil Ignacak
	* libcw/tone queue: cw_generator_write_sine_wave_internal(): using
	cw_signal_wait_internal() (together with pthread_kill() in enqueue
	function) instead of usleep() - this should decrease CPU usage in idle
	state; still needs to be tested and verified, but - overall - good
	idea; I think that this solution existed in libcw before I've started
	slaughtering the code, so consider this just rediscovering of a clever
	code;

2012-05-10 Kamil Ignacak
	* libcw/console: Console output now works correctly, playing nicely
	with queue()/dequeue() and the generator.

2012-05-06 Kamil Ignacak
	* cwcp/user interface: fixing small bug in code: till now modifying
	practice time didn't work correctly, any attempts to do so resulted
	in resetting the time to zero. Now this is fixed.

2012-05-01 Kamil Ignacak
	* libcw/experimental code: removed code that was disabled when
	CW_DEV_EXPERIMENTAL_WRITE was set to 1.

2012-05-01 Kamil Ignacak
	* libcw/audio: more changes in libcw; I'm decreasing dependency
	on timers, and increasing dependency on tone queue. I could put
	it that way: there are less places where time periods are dictated
	by itimers, and more places where time periods are measured by
	audio systems' 'write' functions. This way I am sure that when I'm
	sending X samples to audio sink, it - given sample rate Y - results
	in Z microseconds of sound.
	This seems like a good concept, it works well so far. I think that
	it will me impossible (and impractical) to get rid of all timers,
	but for generating audio - it works well.
	There may be a problem with console buzzer, as there is no audio
	sink that would accept X samples, but already I have an idea how
	to solve this.
	I've been using CW_DEV_EXPERIMENTAL_WRITE definition to enable new,
	experimental code, and disable old code. Since the new, experimental
	code works so well, I will completely get rid of the old code soon.

2012-04-25 Kamil Ignacak
	* libcw/ALSA: the problem described below has been solved, but
	at a cost of significant changes in how a Morse code sound is
	generated (timers are no longer used). This will almost certainly
	affect other parts of libcw (e.g. Morse keys handling), but it has
	advantages: timing of ALSA sound is (should be - to be tested)
	perfect, and I can easily add support for PulseAudio. (this change
	has been made and committed earlier, somewhere between 21.04 and
	24.04, I'm just describing it now).
	* libcw/PulseAudio: Adding support for PulseAudio.
	PulseAudio only works with "experimental write" enabled, so there
	is no way that I can have both PulseAudio and old algorithm for
	generating audio. Either I will have to refactor/refresh/rework
	rest of libcw.c (and then have PulseAudio), or I will leave old
	way of generating audio (not breaking things (yet) in applications
	using libcw, but also not having PulseAudio).

2012-04-21 Kamil Ignacak
	* libcw/ALSA: I've noticed that there is a problem with waveform
	produced with ALSA. Dits and dashes start at correct time, but
	they are ended incorrectly - either too soon, or too late.
	This results in dots and dashes of incorrect length. The length
	differences are small, but audible.
	I have ruled out problems with itimer. itimer doesn't produce
	perfect time intervals, but error introduced by itimer is way to
	small to result in described problem.
	The problem is probably related to delay introduced by
	snd_pcm_writei().
	I'm thinking about following solution: start generating tones (be
	it inter-symbol silence, or the symbols (dits and dashes) themselves)
	on signal generated by itimer, but stop generating dit/dash/silence
	after writing specific number of samples to audio device.
	In other words: start generating on timer events, stop generating on
	sample counter overflow.
	The problem doesn't seem to appear when using OSS output, perhaps
	because sound fragment size is much smaller than ALSA period size,
	e.g. 128 vs. 940.

2012-04-15 Kamil Ignacak
	* build system: Most important change: adding code that handles
	--disable-xxx options passed to the script:
	--disable-console
	--disable-oss
	--disable-alsa
	--disable-cwcp
	--disable-xcwcp
	The options allow disabling certain functionalities of unixcw, so
	that the package can be built on machines that don't provide some
	functions or properties.
	Example: unixcw 3.0.1 can't be compiled on hurd-i386 because of
	this error from configure script:
	"configure: error: Cannot find either sys/kd.h, sys/vtkd.h, or sys/kbio.h"
	At lease one of these headers is needed for console buzzer support.
	With new code in configure, compilation of code working with console
	buzzer can be disabled.
	Similarly, user can now disable compilation of OSS-related code on
	platforms that no longer provide OSS.
	Functionality can be disabled explicitly (with command line option),
	or implicitly - if any of tests performed by configure script fails.
	Changes described above required some modifications of libcw.c file.
	Also added --enable-dev.

	Build system now uses Makefile.am and Makefile.in files used/generated
	by Automake. Adding two calls to configure: AM_INIT_AUTOMAKE (build
	system now uses Automake to handle Makefile files), and
	AC_PROG_LIBTOOL (libtool is now used to create libraries).

	Build system now supports "make distcheck" target.

	Build system now depends on libtool.

