version 3.6.1 / 2023-11-18

  libcw:

  - Fixing "cw timing" problem
    Commit faa8c85052b30a788672568cab083791f0043b78

    Problem:

    Duration of inter-word-space was equal to 10 units, while it should have been
    7 units.

    As far as I know, the inter-word-space was not equal to 7 for many years.

    Solution:

    Add code that tracks enqueued spaces (primarily inter-mark-spaces and
    inter-character-spaces, but also inter-word-spaces), and use that tracker to
    decide how long an enqueued inter-word-space should really be.

    Additional change that fixes the problem is with not enqueueing
    inter-character-space when inter-word-space was enqueued.

    Tests:

    Large part of commits done to the repo since last release was dedicated to
    expanding of testing capabilities of the libcw tests in area of generator,
    receiver and timings.

    Some libcw tests have been improved and other tests have been added to
    automatically test some of libcw APIs that may be affected.

    "simple receiver" type has been improved to make it more helpful in
    discovering problems with timings.

    Automatic test in which generated samples are stored to disc file and then
    are analysed has been improved.

    "Manual" tests have been executed where generated audio is captured by
    external program (Audacity) and the different timings of different marks and
    spaces are measured in the program to confirm that proper relations (1/3/7
    units) are kept.

  - libcw's version has been changed from 7:0:0 to 8:0:0. The change in
    "current" number is caused by scope of changes to cw_gen_t type needed to
    fix "cw timing" issue. See
    https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
    for more information on libcw's versioning scheme.

  - If PulseAudio sound system is not available at runtime, libcw checks
    value of XDG_RUNTIME_DIR env variable and prints an information if the
    variable is empty. Empty variable may indicate incorrect configuration of
    PulseAudio in user's system.

  - Fixing minor issue with omitted checking of return value from ALSA's
    snd_pcm_hw_params_set_periods().


  General:

  - Fixing minor issues found during static code analysis.

  - Clearing up custom flags passed to ./configure script: all flags that
    enable features aiding a development of unixcw now start with
    "--enable-dev-".

  - Compilation of cw and cwgen programs can be now disabled through
    ./configure's "--disable-cw" and "--disable-cwgen" flags. Similar flags
    for other unixcw programs were already present.

  - Default optimization and debug flags in CFLAGS have been changed from
    "-g -O2" to "-O2". This still can be overriden by setting CFLAGS env
    variable.

  - Default optimization and debug flags in CXXFLAGS have been changed from
    "-g -O2" to "-O2". This still can be overriden by setting CXXFLAGS env
    variable.

  - GNU GPL copyright notice printed by programs (e.g. when ran with "-v"
    option) is now more in line with information presented in
    https://www.gnu.org/licenses/old-licenses/gpl-2.0.html#SEC4. In other
    words the copyright notice is less custom and much more standard.


  Quality Assurance:

  - Added automatic tests of following libcw functions:
    - cw_get_receive_parameters()
    - cw_gen_enqueue_character_no_ics()

  - Improved automatic tests of some of libcw functions.

  - All code is now compiled with "-D_FORTIFY_SOURCE=1". In the future this
    will be upgraded to "-D_FORTIFY_SOURCE=2".

  - Refactoring a script that tests all custom flags passed to ./configure
    script.

  - Improving helper files used for static code analysis. clang-tidy now has
    its global configuration file uses during analysis of code in entire
    package.

  - Adding automatic tests of cwgen. The tests cover a significant portion of
    cwgen's functionality and are executed during "make check". This greatly
    reduces need for manual tests of cwgen.

  - Adding automatic tests of cwutils/combine_arguments().


  Debian:

  - Integrated changes from Debian patch 0001-FTCBFS.patch: hardcoded
    "pkg-config" name is now replaced with "$PKG_CONFIG" in configure.ac

  - Integrated changes from Debian patch
    0004-reprotest_collate_make_fix.patch: language-independent sorting that
    allows reproducible builds.


  Alpine Linux:

  - unixcw now explicitly defines _FORTIFY_SOURCE in CFLAGS, with value '1'.
    This causes the following warning during compilation:

        <command-line>: warning: "_FORTIFY_SOURCE" redefined
        <built-in>: note: this is the location of the previous definition

    I plan to change value of _FORTIFY_SOURCE to '2' in next release of
    unixcw.


----------------------------------------------------------------------------


version 3.6.0 / 2021-01-17

  libcw:

  - libcw no longer uses signals (and SIGALRM in particular) for any
    internal purpose. Internal communication between generator and
    queue has been re-implemented using other mechanism:
    pthread_cond_wait() and pthread_cond_broadcast().

  - in relation to the above, in order to avoid calling of
    pthread_cond_wait() and pthread_cond_broadcast() in signal
    handlers, the SIG_IGN and SIG_DFL values registered with
    cw_register_signal_handler() are completely ignored. It is
    strongly advised to avoid any libcw cleanup or calls to exit() in
    signal handlers (registered with either with
    cw_register_signal_handler() or with more direct methods).

  - enabling ALSA's configuration of HW period size.

    libcw's ALSA code now tries to configure HW period size to be
    smaller than in previous versions of code. Normally the period
    size could be in range of hundreds of frames, now it's possible to
    have the period size of tens, or low hundreds of frames.

    Decreased period size should lead to better behaviour of ALSA's
    writei() function: the function should now properly block during
    write of samples to ALSA handle in all circumstances.

    Correct blocking behaviour of writei() should lead to correct
    behaviour of libcw's internal keying mechanism, responsible
    e.g. for calling keying callbacks registered by programs using
    libcw (such as cwdaemon). Such callbacks will be now called at
    proper time intervals that match duration of enqueued
    dots/dashes/spaces.

    Initial report of incorrect behaviour, initial debugging, and
    confirmation of a fix come from Matthew M5EVT. Thanks Matthew!

  - ALSA period size (in samples) used by applications (cw, cwcp,
    xcwcp) can be specified in command line through --alsa-period-size
    command line arg.

  - modifying PulseAudio parameters to decrease XRUNS and improve
    behaviour of callback registered by client code in library.

    Integrating these two commits from Matthew M5EVT
    https://github.com/m5evt/unixcw-3.5.1/commit/2d5491a461587ac4686e2d1b897619c98be05c9e
    https://github.com/m5evt/unixcw-3.5.1/commit/c86785b595a6d711aae915150df2ccb848ace05c

    The result is a better behaviour of PulseAudio sound sink, a bit
    similar to ALSA improvements mentioned above. Thanks again,
    Matthew!

  - Behaviour of cw_lookup_phonetic() library function has been modified: the
    function now accepts NULL as a second argument (output buffer).

  - Several items in libcw_debug.h are marked as deprecated. These items
    should be used only internally, during development of libcw, and should
    not be used by client code. They will be removed from the header in the
    future.

  - Declaration of cw_debug_print_flags() has been removed from libcw_debug.h
    header. The function was not defined in the library, so no one could have
    used the function.

  - Function cw_generator_set_tone_slope() from libcw.h is now marked as
    deprecated. The function was/is unusable because there is no way that
    client code can pass a cw_gen_t variable as first argument.

  - Replacing some usages of double type with float type. There is very
    little (or maybe even nothing) in the library that would require
    precision or range of double.

  - Adding new function: cw_generator_remove_last_character().  The function
    removes last character enqueued to generator, it can be called multiple
    times to remove a group of characters. The function can be used e.g. in
    reaction to Backspace character pressed in User Interface.

    This functionality was implemented by Zoltan Csahok and merged here:
    https://sourceforge.net/p/unixcw/code/merge-requests/1/, but it has been
    rewritten a bit: removing of character must be explicit, through the
    function call.

    The initial solution was affecting which characters are classified by
    libcw as valid and which aren't, and it may have broken some legacy
    code. Also using Backspace to remove a character is a User Interface
    concept, which in cwcp and xcwcp is handled explicitly by UI code, not
    implicitly by library code. Therefore I decided to rework the initial
    solution and add the new function to library.

  - modifications to receiver functions:

    cw_receive_character(), cw_receive_representation(),
    cw_start_receive_tone() and cw_end_receive_tone() are now actually
    setting errno to EINVAL (as described in documentation) when they detect
    that input timestamp (when the timestamp is non-NULL) is in some way
    invalid.

    cw_receive_buffer_dot() and cw_receive_buffer_dash() set additional value
    of errno (EINVAL) when they detect that input timestamp (when the
    timestamp is non-NULL) is in some way invalid.

    Please review information in man page about errno values set by these
    functions.

  - cw_wait_for_tone_queue_critical() now sets errno to EINVAL and returns
    CW_FAILURE if function's argument is negative.

  - there is a hard limit on length of name of sound device: 127
    characters (+1 for terminating NUL).

  - fixing Debian bug #979113 (https://bugs.debian.org/979113).

  - library soname/version changed from 6.6.1 to 7.0.0.

  xcwcp:

  - program's command line option "--sound" has been changed to
    "--system", for consistency with similar option in other unixcw
    programs.




  Plans for next release:

  - improve quality and quantity of tests of libcw functions.

  - fix some of FIXMEs and do some of TODOs that don't break
    compatibility.

  - do full review of cwgen's code.

  - introduce fully automatic tests of cwgen's output.

  - perhaps improve PulseAudio parameters.


----------------------------------------------------------------------------


version 3.5.1 / 2017-02-XX

  libcw:

  - fixing a bug in libcw/generator that may have lead to a key being
    permanently in "down" state upon silencing a generator.

    If cwdaemon using libcw with NULL or Console output was generating
    tones from user input, and received ESC-4 escape request ("Abort
    currently sent message"), it was possible that while the message
    was interrupted, the key remained in "down" state.

    The fix in libcw makes sure that upon request to stop generating
    tones, the key always goes up, regardless of audio output type.

    The bug was reported and investigated, and fix was provided by
    Csahok Zoltan. Many thanks Zoli!

  - Library soname/version changed from 6.5.1 to 6.6.1.


----------------------------------------------------------------------------


version 3.5.0 / 2015-10-06

  libcw:

  - adding few more small tests.

  - trying to fix a problem of short space.  The problem occurs when
    client application has registered low-tone-queue callback, the
    threshold for the callback is set to 1, and a single end-of-word
    space has been enqueued by client application.  When the eow space
    is enqueued as a single tone-queue tone (or even as two tones)
    ("short space"), older versions of libcw may miss the event of
    passing of tone queue level from 2 to 1 and will not call the
    callback.

  - Library soname/version changed from 6.4.1 to 6.5.1.

  xcwcp

  - porting the application from Qt4 to Qt5.


----------------------------------------------------------------------------


version 3.4.2 / 2015-06-17

  libcw:

  - fixing one possible cause of segfaults in generator code
    (segfaults occurred when pthread_kill() was called with invalid
    thread ID in some specific circumstances).

  - fixing another problem with libcw: when a generator is created,
    then is *not* started, and then is deleted, libcw called
    pthread_kill(&id, ...) on uninitialized id in
    cw_gen_delete(). This caused a program to crash.

  - fixing problems with OSS and generator modules that surfaced
    during tests on Alpine Linux.

  - expanding unit tests.

  - libcw is now compiled with -DNDEBUG flag by default (asserts are
    "off"). The asserts are still "on" by default in "unit tests"
    libcw. Asserts are switched "on" in base libcw with "./configure
    --enable-dev".

  - cw_generator_set_tone_slope(): some corner cases of handling
    function's arguments were cleared in function's top level
    comments, and implementation has been updated accordingly.

  - Library soname/version changed from 6.3.1 to 6.4.1.


----------------------------------------------------------------------------


version 3.4.1 / 2015-01-02

  libcw:

  - The remainder of code from libcw.c has been moved to respective
    module files. New module file has been created: libcw_rec.c - it
    contains receiver code. I think that number of modules won't
    change anymore. libcw.c has been removed, all functionality is now
    implemented by module files.

  - A number of unit test functions has been moved from
    libcw_test_public.c to respective module files. These functions
    can be executed independently, so there is no reason to keep them
    in libcw_test_public.c. They can be kept in module files, close to
    tested library functions. libcw_test_public.c is now less
    difficult to work with. The moved test functions are now executed
    while building "make check" target, so they should be called more
    often, increasing the chances of catching problems early.

  - Data sets for some of receiver's unit tests are now generated by
    helper functions. This allowed me to increase size of the data
    sets and increase variation of the data (both for fixed speed
    receiving and for adaptive receiving).

    The data sets are basically timing tables used to drive the
    receiver - to test main functions of the receiver, responsible for
    accepting mark/space events from client code.

    The increased size and variation of the test data gives me more
    confidence that the core functionality of the receiver works as
    expected.

  - If you run libcw in debugging mode and you depend on Receiver
    State names (strings starting with RS_) printed by library's debug
    messages, you may want to check changed values of RS enum and
    corresponding strings on top of libcw_rec.c - they have been
    changed.

  - Some changes have been made to library functions (mainly in
    generator and receiver modules) to ensure that the code separated
    between modules can be compiled and that it works as expected.
    Since receiver code has been put in a separate file, it was
    possible to review and refactor the receiver code a bit.

    No functionality of the library has been changed, with an
    exception described in next point.

  - Data type of receiver's speed is now internally a float instead of
    int. This change improves behaviour of adaptive receiving
    algorithm a bit. It's not a big change, but it may positively
    impact client code using receiver functions.

  - libcw_test_public test executable now accepts '-m' command line
    option (for selecting module(s)) to test. Check output of
    'libcw_test_public -h' for more details.

  - Since the modification described above does not change how the
    library works, nor does it change any API, there is no reason for
    any major revision changes. Library soname/version has been
    changed from 6.2.1 to 6.3.1.


----------------------------------------------------------------------------


version 3.4.0 / 2014-11-11

  unixcw:

  - Build system files have been modified to correctly configure and
    compile unixcw (or at least parts of it) on following platforms
    (in addition to Debian GNU/Linux):
    - FreeBSD 10.0 (x86_64-unknown-freebsd10.0, with clang 3.3);
    - FreeBSD 9.3 (freebsd9.3 with gcc 4.2.1);
    - OpenBSD 5.5 (amd64-unknown-openbsd5.5 with gcc 4.2.1);

    See INSTALL file for more information.

  - QT4 configuration flags (CFLAGS, LIBS, MOC) are now detected only
    by using pkg-config. My hand-made script that searched for QT4
    files has been reduced to simple call to PKG_CHECK_MODULES().
    This means that the following arguments are no longer accepted by
    configure script:
    --with-qt-cflags=<string>
    --with-qt-libraries=<path>

    If you want to override pkg-config settings, you can still use
    environment variables. Check output of "./configure --help" for
    details


  libcw:

  - Large parts of libcw.c have been moved to new files:
    - libcw_gen.c (generator)
    - libcw_tq.c (tone queue)
    - libcw_data.c (representations and lookup)
    - libcw_key.c (straight key, iambic keyer)
    - libcw_signal.c (signal handling)
    - libcw_utils.c (utility functions)

    Benefits of this move:
    - I won't have to use a table of contents to move around in
      libcw.c (the file had 10kLOC before this operation);
    - it will be easier to define boundaries between functionality of
      modules, and it will be easier to reason about how these modules
      should function and interact with each other;

    Check ChangeLog entry from 2014-07-28 for more information on this
    subject.

    Separation of libcw modules is not yet completed. Receiver code is
    still mixed with generator code, and there are still some
    functions left in libcw.c. I expect to finish the separation in
    one or two development cycles.

  - "make check" now builds three executables in libcw directory:
    - libcw_test_internal
    - libcw_test_public
    - libcw_test_simple_gen

    main() functions for test executables have been moved outside of
    libcw.c.

  - fixed bug in OSS code on BSD systems (found under FreeBSD 10). As
    part of configuring OSS device, libcw made this call:
    ioctl(*fd, SNDCTL_DSP_POST, &parameter)

    It turns out that this call was unnecessary and returned error
    value. This prevented libcw from correctly opening OSS device.
    Now OSS device should be again available to unixcw applications.
    Notice that this bug most probably affected only BSD systems.

  - Library soname/version changed from 6.1.1 to 6.2.1.

    All these changes described above did not change API of the
    library in any way. Functionality of the library is
    intact. libcw.h header file has not been changed at all.


  cwcp:

  - cwcp ignored CWCP_OPTIONS environment variable. Now it should read
    it and use it as intended.

  - cwcp code has been reviewed. Code has been modified to ensure that
    each call to ncurses' newwin() is matched with delwin(). valgrind
    may still complain, but now the situation is a bit better.


----------------------------------------------------------------------------


version 3.3.1 / 2014-04-23

  libcw:

  - Fixing bug discovered when fixing a problem with cwdaemon,
    reported by Pino Zollo ZP4KFX. Condition for calling "low water
    mark in tone queue" callback was invalid. This resulted in calling
    the callback too early or too often.

  - Library version changed from 6.0.1 to 6.1.1.

Big *thank you* to Pino Zollo ZP4KFX for reporting a problem with
cwdaemon and for helping to solve it in cwdaemon and in libcw.


----------------------------------------------------------------------------


version 3.3.0 / 2013.12.10

  unixcw:
  - 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. Thanks Thomas!
  - FreeBSD patches: Diane Bruce provided a set of patches that fix
    compilation on FreeBSD (thank you!). Thanks to the patches the
    ./configure script now should support two new flags:
    --with-qt-cflags=<string>
    --with-qt-libraries=<path>
    The state of build system on FreeBSD may still not be perfect (I
    didn't test this myself on FreeBSD), but should now be better than
    it was.

  libcw:
  - 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.
  - unit tests: improvements and expansion of unit test code testing
    public API.
  - unit tests: improvements and expansion of unit test code testing
    libcw's internal functions.
  - receiver code (responsible for receiving and recognizing Morse
    code keyed with iambic keyer or straight key) has been reviewed.
  - code handling incoming events for receiving iambic keyer has been
    improved. iambic keyer events sent from client code to libcw are
    recognized with better precision, which leads to better
    recognition of keyed characters. These changes don't change public
    API nor "external" behaviour of libcw - these are just
    improvements of existing functionality.
  - new function: cw_iambic_keyer_register_timer(): to be used by
    client code that wants to receive Morse code sent with mouse or
    keyboard keys emulating iambic key. The function is related to the
    change mentioned one point above.

    At this point the interface to iambic keying becomes a bit more
    complicated. It will take me some more time to figure it out
    completely. For now I've made some internal fixes and changes that
    improve one aspect of this functionality, and as a result I had to
    add this one function. Expect more changes in future.

    If you want to see an example of usage of the keyer API, see xcwcp
    source code.

  xcwcp:
  - xcwcp takes advantage of changes in how libcw handles iambic
    keying, and - with some additional modifications in xcwcp's code -
    gets improved handling of iambic keying.

  cwgen:
  - improving randomness of generated strings;
    until now if cwgen was called twice within the same second, it
    produced the same result (since the random function has been
    seeded with value returned by time()). Now the seed comes from
    gettimeofday() (the milliseconds part), so randomness has been
    improved a bit.

  cwutils:
  - unit tests: adding first unit test in cwutils/dictionary module.
  - bugfix: usage of __attribute__ ((deprecated("message"))) construct
    in cwutils/dictionary.h may have lead to compilation failure. This
    has been fixed by getting rid of "message" argument.


----------------------------------------------------------------------------


version 3.2.0 / 2013.01.11

  unixcw:
  - Fixing faulty logic checking "--disable-feature" flags in configure.ac.
    Bug reported by Thomas Beierlein. Thanks Thomas!

  libcw:
  - Debugging facilities of the library are being rewritten and have been
    moved to new file: src/lib/libcw_debug.h. See the file for details of
    new interface. The interface may still change, and it isn't documented
    yet. List of CW_DEBUG_* flags has been modified. The old interface is
    being deprecated.
  - libcw now can generate tones with slopes shaped as sine function or as
    raised cosine function. The 'raised cosine' slope is now default.
  - Rewriting usage of "__attribute__ ((deprecated(msg)))" facility in libcw.h.
    A user has reported errors related to the attribute when compiling libcw
    with gcc 4.3.3.
  - Improving the method of queuing a space character. This helps me avoid
    problems in some corner cases (e.g. when a single space is queued, and
    tone queue's low watermark is set to 1).
  - Improving behaviour of cw_generator_new(). Under some circumstances it
    is less likely to fail to create new generator. There was also possibility
    of causing a client application to crash if the function failed, but
    this has been fixed.
  - Library version changed from 4.1.1 to 5.0.0.

  cwcp:
  - Fixing one small issue: in every new session with cwcp the application
    printed a space at the beginning of played text.


----------------------------------------------------------------------------


version 3.1.1 / 2012.07.04

  libcw:
  - Fixing problem with interlocks in thread code. Library version
    changed from 4.0.0 to 4.1.1.


----------------------------------------------------------------------------


version 3.1.0 / 2012.06.30

  unixcw:
  - Added support for PulseAudio.

    All applications from unixcw that produce audio output benefit from
    this. PulseAudio is the default audio backend on machines with installed
    and accessible PulseAudio server. If audio backend hasn't been specified
    by user, the applications try to access different sound backends in
    following order:
    PulseAudio -> OSS -> ALSA -> console buzzer.

    The usual restrictions for console buzzer output (root privileges
    required) still apply.

    Running application from unixcw package (cw, cwcp, xcwcp) with
    ALSA selected as sound backend while PulseAudio server is running
    will result in all kinds of different problems.  User is warned
    about such situation by the application.

  - Added 'Null' audio system as an optional audio backend. No sound is
    being played if this system is selected, libcw is spending its time only
    on generating tones of proper length and sending then in proper moments
    to a pseudo-device. Pass '-s n' option to unixcw application to use this
    'audio' backend.

  - Thanks to changes in libcw, unixcw doesn't 'require' ALSA or PulseAudio
    libraries, or PulseAudio server on target system, even if support for
    the two audio backends was compiled in. The two audio backends are now
    only recommended, thanks to linking to the libraries at run time.

  - Build system now uses libtool. 'libtool' script is in release
    archive, so there are no new compile-time requirements related to
    this (at least 'make distcheck' completes successfully with libtool
    package uninstalled).

  - It is possible to explicitly disable support for audio backends at
    compile time. Pass --disable-{console|oss|alsa|pulseaudio} to
    ./configure to do this.

  - It is possible to explicitly disable compilation of cwcp and xcwcp.
    Pass --disable-{cwcp|xcwcp} to ./configure to do this.

  - Build system now uses Makefile.am files as a basis to generate Makefile
    files.

  - Build system now supports and correctly builds "make distcheck" target.


  libcw:
  - Added support for PulseAudio.
    There are still some things to be improved in code implementing support
    for PulseAudio, but pretty solid basics are there.

  - Added support for Null pseudo-audio-system. Not sure if it will be useful,
    I just thought that someone would like to use libcw without generating
    any sound. Perhaps some simple platforms without audio devices, perhaps
    practicing sending/keying without playback. Who knows. It was easy to do,
    so I did it.

  - If you compare libcw.c files from this and previous release, you will
    notice lots of changes. This is because I've changed the algorithm that
    controls time periods when generating tones (generating sine wave).

    Until now the periods were measured with itimers. The tricky part was to
    keep two processed in sync: turning sine wave on and off, and sending
    the content of audio buffer with sine wave to audio backend. I'm calling
    it 'tricky' because it works fine only for small sizes of audio buffer,
    as was is in case of OSS (~128 samples). With larger buffer sizes forced
    by ALSA (~1k samples) the two processes de-synchronize. I had to come up
    with better design, and the side effect of the design is total rewrite
    of parts of libcw.c (for my own purposes I call the rewrite a 'butchering',
    but that is a different story).

    New design relies on blocking writes to audio systems, and their property
    of being able to play only X samples (Y milliseconds) at a time (with
    given sample rate).

  - Following functions are deprecated:
    cw_check_representation(),
    cw_lookup_representation(),
    cw_lookup_character().

    Use these instead:
    cw_representation_is_valid(),
    cw_representation_to_character(),
    cw_character_to_representation().

  - library's soname changed from 3.0.1 to 4.0.0

    Library's version becomes independent from version of unixcw.

  cwcp:
  - Fixing small bug in user interface: 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.


----------------------------------------------------------------------------


version 3.0.2 / 2012.06.18

New version. You won't find it in git repo, but only in SourceForge download
area and on Debian webpage.
This is a special release with two goals related to Debian packaging:

  debian/:
  - fixing Debian's FTBFS bug #676752
  - removing debian/ from unixcw_X.Y.Z.orig.tar.gz. Contents of debian/ can be
    found in separately provided unixcw_X.Y.Z-W.debian.tar.gz

Thanks to Kamal Mostafa for patiently explaining to me some details of
Debian/Ubuntu packaging.


----------------------------------------------------------------------------


version 3.0.1 / 2012.01.08

Thanks to Kamal Mostafa for providing patches that are the reason
for 3.0.1 release.
Content of upstream package unixcw-3.0.1 is approximately the same as of
Debian source package unixcw_3.0-5.

  debian/:
  - added proper "Section" field in control file;
  - fixed library dependencies in control file;
  - fixed "Replaces:"/"Conflicts:" fields in control file;
  - fixed Debian bug #653411: changes in *.preinst files to remove
    dangling symlinks left by old packaging (suggested by Bob Proulx);

  general:
  - fixed library dependencies in "configure" script;
  - fixed library dependencies provided by libcw.pc file;

  libcw:
  - proper detection of capabilities of liboss-salsa-dev
    (kfreebsd's libasound implementation); libcw now can be built
    properly on Debian/kFreeBSD;
  - fixing awk scripts producing man pages: the awk scripts now
    work with mawk too;

  cwcp:
  - fixed list of libraries in Makefile;


----------------------------------------------------------------------------


version 3.0 / 2011.12.13

Thanks to Simon Baldwin for creating this software in the
first place, and to Kamal Mostafa for helping me with packaging
unixcw 3.0 for Debian.

  unixcw:
  - Changed major version of unixcw package to '3'. Changes listed
    below probably justify this.
  - New main developer: Kamil Ignacak <acerion@wp.pl>
  - New website: http://unixcw.sourceforge.net
  - Scripts building Debian packages now build 'libcw3' package
    instead of 'unixcw' package, and 'libcw3-dev' Debian package instead
    of 'unixcw-dev' Debian package.

  libcw:
  - Renamed 'cwlib' part of unixcw package to 'libcw'.
  - Renamed library's header file from cwlib.h to libcw.h.
  - Changed library's soname from 0 to 3 (/usr/lib/libcw.so.3.0.0
    / libcw.so.3).
  - Added support for ALSA. OSS is still the default backend.
  - As a consequence, libasound2 is a new dependency. There is no
    possibility (yet) to disable or reconfigure this at build time.
    It is possible to select sound backend in applications that use
    libcw.
  - Added implicit dependency on pthread library (which is a part
    of libc library, so it should be available on target system by
    default). Main routine generating sine wave operates as a separate
    thread.
  - Added actual slopes to dot and dash sounds produced by the
    library. This should result in less of (or even none) audible
    pops. Unfortunately current implementation makes dots and dashes
    a tiny bit longer than they would be without the slopes. The
    difference is not significant, but I plan to re-implement it
    in the future to make this feature 100% correct.
    The slopes are linear.
  - Rewritten management of sound volume so that the library doesn't
    use OSS mixer. This should resolve Debian bug #567394
    (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=567394).
    Code that controls volume level is common for OSS and ALSA.
  - Since libcw doesn't touch the mixer device anymore, then Debian
    bug #567392 should be resolved as well
    (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=567392).
  - Added code that attempts to discover proper audio buffer size
    for both OSS and ALSA. This should resolve Debian bug #567395
    (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=567395).
  - Fix of Debian bug #567395 should also solve Debian bug #567397
    (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=567397).
  - Changed library's API. There will be more API changes in 3.1, so
    consider current API to be unstable.
  - Changed volume change step from 5% to 1%.
  - Changed frequency change step from 100Hz to 20Hz.
  - The library no longer can produce sound on console buzzer and on
    sound card at the same time.
  - The library knows default names of OSS, ALSA and console buzzer
    devices. The names are used to open sound devices if no other
    names are provided explicitly as function arguments.
  - Introduced symbolic names of int values returned by most of
    library's function: CW_FAILURE / CW_SUCCESS.

  xcwcp:
  - Ported xcwcp to QT4. This should resolve Debian bug #604386
    (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=604386).
  - Added auto-detection of QT4 headers and QT4 moc by build files.
