Hello community,

here is the log from the commit of package wavemon for openSUSE:Factory checked 
in at 2020-10-26 16:21:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wavemon (Old)
 and      /work/SRC/openSUSE:Factory/.wavemon.new.3463 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wavemon"

Mon Oct 26 16:21:56 2020 rev:28 rq:844020 version:0.9.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/wavemon/wavemon.changes  2020-03-17 
13:09:47.497782671 +0100
+++ /work/SRC/openSUSE:Factory/.wavemon.new.3463/wavemon.changes        
2020-10-26 16:22:28.571232545 +0100
@@ -1,0 +2,31 @@
+Sat Oct 24 19:04:00 UTC 2020 - Martin Hauke <mar...@gmx.de>
+
+- Update to versino 0.9.2
+  General
+  * proper rendering on UTF-8 terminals (#70),
+  * enabled by using libncursesw in place of libncurses,
+  * and using wide-characters for rendering where supported.
+  Info Screen:
+  * properly clear area when updating with new data,
+  * do not leave rx / tx empty when no data available (use 'n/a'
+    instead),
+  * improve rendering on some terminal types (e.g. ansi),
+  * refresh immediately after a window-size change;
+  History Screen:
+  * do not display noise / SNR levels when such data is not
+    reported by the driver;
+  Scan Screen:
+  * fix segmentation fault when no CAP_NET_ADMIN permissions,
+  * fix locking bug (#78), redoing the original and incorrect fix
+    (#42),
+    as a result, screen now retains data when switching windows;
+  Conf Screen:
+  * fix memory leak identified in #73,
+  * reorganize into sections via separators.
+  Miscellaneous
+  * Keyboard shortcuts: can now use 0..9 in place of F10,
+    F1..F9 (#76);
+  * Scan screen: increased the usable window size by 1 line;
+  * Build: updated several outdated build/bootstrap files.
+
+-------------------------------------------------------------------

Old:
----
  wavemon-0.9.1.tar.gz

New:
----
  wavemon-0.9.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ wavemon.spec ++++++
--- /var/tmp/diff_new_pack.FYJYPl/_old  2020-10-26 16:22:29.035232918 +0100
+++ /var/tmp/diff_new_pack.FYJYPl/_new  2020-10-26 16:22:29.035232918 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           wavemon
-Version:        0.9.1
+Version:        0.9.2
 Release:        0
 Summary:        An ncurses monitoring application for wireless network devices
 License:        GPL-2.0-or-later

++++++ wavemon-0.9.1.tar.gz -> wavemon-0.9.2.tar.gz ++++++
++++ 5545 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/AUTHORS new/wavemon-0.9.2/AUTHORS
--- old/wavemon-0.9.1/AUTHORS   2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/AUTHORS   1970-01-01 01:00:00.000000000 +0100
@@ -1,10 +0,0 @@
-Current Maintainer:
--------------------
-Gerrit Renker <ger...@erg.abdn.ac.uk>
-
-Original author:
-----------------
-Jan Morgenstern <j...@jm-music.de>
-
-wavemon uses the Linux Wireless Extensions by Jean Tourrilhes 
<j...@hpl.hp.com>.
-See also the files THANKS and ChangeLog.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/ChangeLog new/wavemon-0.9.2/ChangeLog
--- old/wavemon-0.9.1/ChangeLog 2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/ChangeLog 1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-ChangeLog:
-       Since version 0.5, wavemon is maintained as a git tree
-       where all changes can be tracked in detail, found at
-       https://github.com/uoaerg/wavemon
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/INSTALL new/wavemon-0.9.2/INSTALL
--- old/wavemon-0.9.1/INSTALL   2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/INSTALL   1970-01-01 01:00:00.000000000 +0100
@@ -1,237 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007 Free Software Foundation, Inc.
-
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
-Briefly, the shell commands `./configure; make; make install' should
-configure, build, and install this package.  The following
-more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You need `configure.ac' if
-you want to change it or regenerate `configure' using a newer version
-of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.
-
-     Running `configure' might take a while.  While running, it prints
-     some messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-  6. Often, you can also type `make uninstall' to remove the installed
-     files again.
-
-Compilers and Options
-=====================
-
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about.  Run `./configure --help' for
-details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you can use GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
-   With a non-GNU `make', it is safer to compile the package for one
-architecture at a time in the source code directory.  After you have
-installed the package for one architecture, use `make distclean' before
-reconfiguring for another architecture.
-
-Installation Names
-==================
-
-By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc.  You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf bug.  Until the bug is fixed you can use this workaround:
-
-     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-`configure' Invocation
-======================
-
-`configure' recognizes the following options to control how it operates.
-
-`--help'
-`-h'
-     Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/NEWS new/wavemon-0.9.2/NEWS
--- old/wavemon-0.9.1/NEWS      2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/NEWS      1970-01-01 01:00:00.000000000 +0100
@@ -1,334 +0,0 @@
-NEWS
-====
-
---------------------
-0.7.6 (2014-01-18)
---------------------
-  * Scan window:
-    - complete redesign based on pthreads to fix terminal bug, as a result of 
better
-      design the scan window now also can be suspended (details of fix are 
below),
-    - add message for 'too much data' (E2BIG) error case,
-    - use same formatting (3 digits) for 2/5 GHz,
-    - support for changing sort order via keyboard shortcuts (see manpage, 
several
-      ascending/descending sort orders are now available directly on the 
screen),
-    - currently active sort order is now displayed on status line at the 
bottom,
-    - stabilized by-channel sort to always use the same order for identical 
channels,
-    - added 'sort by Essid' to selection of sort menus;
-  * Info window:
-    - add percentage for easier reading of link quality,
-    - deprecate use of locale settings for 'discard' information (fixes 
display);
-  * Configuration screen:
-    - add support for Page Up/Down, Home, and End buttons to ease navigation,
-    - added more information to '-v' version information (ncurses/WE versions);
-  * Bug fixes:
-    - fix bug in ranking top/bottom 3 channels in scan window,
-    - complete redesign of scan process based on pthreads to fix bug that 
became
-       visible on ncurses >= 5.9.20130504 (slackware 14.1 and debian jessie), 
caused
-       by child/parent both updating the same screen (bug had been hidden by 
the
-       internal buffering of ncurses which was then removed), reported by Nick 
Warne.
-
---------------------
-0.7.5 (2012-05-04)
---------------------
-  * Scan window:
-    - added a summary status line to present summary statistics.
-  * Bug fixes:
-    - added additional keyboard shortcuts for each screen to cope with
-      terminals which remap the function keys, fixing Ubuntu bug #725036;
-    - the shortcut is the first character of the screen's name (F1: i,
-      F2: l, F3: s, F7: p, F8: h, F9: a, F10: q), see manpage for details;
-    - added work-around for terminals with broken terminfo entries (e.g.
-      old aterm), now supporting the vt100 PF1..4 sequences in addition.
-
---------------------
-0.7.4 (2012-02-03)
---------------------
-  * General:
-    - deprecate reliance on /proc/net/wireless, since tests on Tiny Core Linux
-      showed that it no longer reliably lists available wireless interfaces,
-    - instead use safe route of using /proc/net/dev, probing each interface
-      in turn for wireless extensions;
-  * Scan window:
-    - configurable scan sort order (at runtime and via configuration file),
-    - can sort by (combinations of) channel, signal strength, and openness,
-    - visually distinguish 2.4GHz and 5.8GHz channels;
-  * Fixes:
-    - wavemonrc.5 manpage fixes thanks to Jonathan McCrohan,
-    - support common options (-v/-h) even if no interfaces found,
-    - but do not start operation unless at least 1 wireless interface exists.
-
---------------------
-0.7.3 (2011-12-22)
---------------------
-  * Scan window:
-    - items are now sorted first by channel (ascending) then by signal
-      strength (descending), as before
-    - using one line per entry doubled the capacity of the scan window
-    - refresh interval is made configurable (via 'Statistics updates')
-  * Configuration screen:
-    - memorizes the last-changed item to ease longer configuration tasks
-  * Fixes:
-    - better (cleaner) termination on error
-    - fixed clear-line refresh in info screen
-    - fixed bug in generator for random link quality (causing negative values)
-    - reverted using separate process group (problems when running under sudo)
-    - miscellaneous code reordering to decouple functional units
-
---------------------
-0.7.2 (2011-02-25)
---------------------
-  * General:
-    - support SIGWINCH for resizing (thanks to Koniu)
-    - reorganized screen handling to support resizing
-    - make geometry checking optional and off by default
-    - allow suspending wavemon (CTRL-Z) on most screens
-  * Info screen:
-    - suppress obvious broadcast address (deriving from prefix)
-    - special case for "no interface address assigned"
-    - display interface MTU if different from the default value
-    - show interface flags and TX queue length if enough space
-  * Scan window:
-    - set up enable interface if it is down (otherwise no scan)
-    - drop support for wireless extensions < 18 (minimum requirement)
-    - clean up child scan process on error (avoid garbled screen)
-  * Configuration screen:
-    - support 'Cisco-style' MAC addresses (dots rather than colons)
-  * Fixes:
-    - do not report zero bitrates (Info screen, 802.11n interface)
-    - remove unused timer in Scan window (data sampling is now
-      confined to info/histogram screens)
-    - fixed various compiler warnings
-    - fixed several problems in and improved the random generator
-    - use sigaction() rather than signal()
-    - miscellaneous reorganization of the configuration menu code
-
---------------------
-0.7.1 (2010-12-24)
---------------------
-  * Scan window:
-    - improved and more consistent formatting of entries
-    - better responsiveness by running scan operation as child process
-  * Security capabilities:
-    - display capabilities supported by the driver
-    - display current and available key sizes
-    - decode relevant IE information
-  * check and warn about insufficient permissions (CAP_NET_ADMIN) that
-    are required for several wireless operations (e.g. scanning)
-  * Bug Fixes:
-    - avoid triggering assertion on large screens
-    - require minimum version (18) of the wireless extensions
-    - better clearing of info screen
-    - various cleanups
-  * overhaul of manpages
-
---------------------
-0.7.0 (2010-10-18)
---------------------
-  * NEW Scan Window: this replaces the old access point screen. It displays
-    a sorted list (in descending order of signal quality) of access points
-    and other wireless clients within range, periodically refreshed at a
-    configurable rate.
-  * Access Point screen: finally deprecated this - the SIOCGIWAPLIST
-    ioctl itself is deprecated and works only on some older kernels.
-  * Info Window: clear screen to erase stale data.
-  * Bug Fixes: fixed a compiler warning in string-tolower operation.
-
---------------------
-0.6.11 (2010-06-14)
---------------------
- * Info screen:
-   - fixed a bug in the freq/channel display: some drivers, such as ipw2100,
-     only return the channel number, requiring to look up the frequency;
-   - added a warning to indicate the absence of data from the interface.
- * Histogram screen:
-   Tag the grid lines with the corresponding dBm levels:
-   - no levels are shown if there is no valid interface data (screen empty);
-   - level tags are restricted to the signal level graph only:
-     o if both signal and noise level data are valid, there are three graphs
-       (signal level, noise level, SNR), which would cause ambiguity,
-     o many cards (e.g. ath5k, rt73usb, iwl3945) do not supply noise data,
-       so that the histogram screen will then only contain the level graph;
-   - since the scale is adjustable, while the grid lines are fixed, the tags
-     are dynamically recomputed based on the y position and current scale;
-   - the min/max bounds of the scale are also shown.
-   Thanks to Sean Muir for this suggestion.
- * Updated manpage regarding access point screen; as soon there is time, the
-   outdated and restricted SIOCGIWAPLIST ioctl should be replaced by a scan.
-
---------------------
-0.6.10 (2009-10-25)
---------------------
- * Bug Fixes:
-   - fixed installation bug which caused manpages to be installed in /man;
-   - fixed mode of installation to support sandbox-builds on Gentoo (Lovelace);
-   - improved (automated) linking process, now possible to pass LDFLAGS 
(Boeck);
-   - bail out when no statistics are available, instead of flagging an error.
-
---------------------
-0.6.7 (2009-07-09)
---------------------
- * Screen geometry:
-   Reduced the screen size again, to 24x80, since this is a widely used default
-   size (thanks to Nelson A. de Oliveira). Removed the "wireless extensions"
-   information from the information screen, to reduce the minimum required
-   number of lines from 25 to 24. The wireless extension information however
-   remains still available, via the "wavemon -d" dump option.
-
- * Histogram screen improvements:
-   - a new revised approach to fix several old bugs and limitations,
-   - new code better observes the boundaries and the configured ranges,
-   - better visibility, signal/noise are now plotted in bold.
-
- * Better separation of error messages, into:
-   - informational warning messages (outside ncurses mode),
-   - fatal errors unrelated to system calls,
-   - fatal errors following a system call (with interpretation of errno(3)).
-
- * Bug Fixes:
-   - fixed a bug in the histogram initialisation (producing ghost values);
-   - fixed a bug which caused non-ASCII encryption key strings to be garbled;
-   - key string length is now checked to avoid spilling over the right border
-     into the next line; curtailing long keys in a pretty-printing manner.
-
---------------------
-0.6.6 (2009-06-01)
---------------------
- * Access point screen:
-   Overly long access point lists (more than 6 peer access points) are now
-   truncated, so as not to overwrite screen borders.
-
- * Histogram screen:
-   The bottom 'key' window used to replicate the configured range values which
-   are available also via the configuration screen. This replication has now
-   been superseded by a dynamic range-tracking feature:
-   - for each of the three ranges (signal level, noise level, SNR), it shows
-     the min..max values on the screen or 'unknown' if the driver reports
-     values as unknown (e.g. noise levels on iwl3945),
-   - these values correspond to the current histogram and are updated
-     dynamically, thus complementing the visual display.
-
- * Bug Fixes:
-   - histogram screen no longer tracks values that the driver reports as 
invalid;
-   - fixed off-by-one bug which caused the bottom access-point border to be 
erased;
-   - miscellaneous code clean-ups:
-     o unified description of window sizes via header file constants,
-     o updated and extended source code documentation.
-
---------------------
-0.6.5 (2009-05-08)
---------------------
- * Several improvements in displaying driver parameters:
-   - ESSID: support for indexed ESS identifiers,
-   - nickname: no longer present empty/void nicknames,
-   - nwid: added support for displaying it (even if is pre-802.11),
-   - IP-address: collapse netmask information into shorter CIDR prefix length,
-   - mode: preliminary support to display 802.11s mesh mode (2.6.26),
-   - retry: new code to display information about MAC-layer retransmissions,
-   - frequency: suppress trailing zeroes, unified conversion,
-   - channel: now also prints the number of the current channel,
-   - encryption keys: added pretty-printing, suppress always-present '0' index,
-   - sensitivity: only print if card supports it, now also supports dBm values,
-   - tx-power: better support for the various formats (relative | mW | dBm),
-   - power management: improved output formatting.
-
- * Mode-sensitive display:
-   - when operating in 'monitor' or 'access point' mode, the 'access point'
-     field is not necessary or redundant (in AP mode, it is the same as the
-     mac address shown in the network window), hence omitted;
-   - when operating in 'master', 'repeater' or 'secondary' mode, the bitrate
-     information is also not needed and hence suppressed;
-   - wavemon is now able to distinguish auto-configured values (using 
upper-case
-     labels) from manually configured values (using standard lower-case 
labels).
-
- * Encryption keys (only with CAP_NET_ADMIN privileges): display of all-ASCII
-   keys is now in cleartext, otherwise the hex format is now pretty-printed.
-
- * Screen Layout: redundancies (repeated interface name) have been removed, the
-   whole screen fits again into a 25x80 console window. In addition, wavemon
-   tests if the screen size and bails out if the screen is too small for a
-   readable layout.
-
- * Better display of MAC addresses:
-   - detects the "not associated" state of a managed client and then
-   - displays 'non-associated' state instead of showing zero MAC address,
-   - sanity checks on access point addresses (broadcast address is invalid),
-   - Ethernet addresses are automatically translated to symbolic names if a
-     mapping  exists for the MAC address in /etc/ethers.
-
- * The Access Point List is now sorted in descending order of signal strength.
-
- * The LC_NUMERIC locale is honoured: when displaying large numbers (e.g. 
packet
-   counters, numbers are now grouped according to the locale.
-
- * Bug Fixes:
-   - fixed several conditions which caused the window borders to be punctured;
-   - fixed a bug in the display of MAC addresses on the access point screen;
-   - RTS/CTS threshold suffered from the same problem - also fixed,
-   - fixed broken display of frag[mentation] threshold;
-   - fixed a bug which caused empty nicknames ("") to be displayed;
-   - fixed several smaller bugs, thanks to sparse.
-
---------------------
-0.6 (2009-04-01)
---------------------
- * Update to the latest wireless extension API (number 22),
-   As a consequence of updating the wireless extensions, more
-   information is now displayed, including
-   - excessive TX MAC reassembly retries,
-   - missed beacon count
-   - display of wireless extension version used by the driver
-   - the driver's internal WE version
-
- * wavemon now uses ioctl to obtain IW statistics and falls back
-   to /proc/net/wireless only as a last resort. (It is planned
-   to add netlink support in a later release.)
-
- * Linear scales (-l option) no longer supported, since levels
-   are always reported both in log (dBm) and lin (mW).
-   (NB: in case of using an old version of ~/.wavemonrc, it is
-        necessary to remove the line containing 'linear_scale',
-       which is the option that has been removed.)
-
- * Added sanity checks to the display of level information:
-   - noise level is only displayed if valid signal levels exist;
-   - some cards set a magic number to mean an invalid noise level - a
-     constant has been added to catch such cases;
-   - if the noise level (and hence the SNR value) is undefined, spread
-     out the  display of quality/signal levels over the info window.
-
- * Added gui option for smoothing level meters (better readability).
-
- * Much better and more accurate information in the Access Point List.
-
- * Bug Fixes:
-   - it is finally possible to use the Access Point List as start screen,
-   - updated and fixed display of operation modes,
-   - selecting the wireless interface now works with multiple interfaces,
-   - header inclusion bug fix for Puppy Linux (thanks to Tom Gordon).
-
- * Updated all components of the autoconf build system:
-   - DESTDIR is now supported for building packages
-     (thanks to Christoph J. Thompson),
-   - now using autoconf to set package version and build date.
-
- * Reorganised source tree organisation:
-   - merged many small (one-line) header files into one,
-   - created a 'contrib' directory for contributed scripts,
-   - added 'config' directory for autoconf auxiliary scripts
-   - reinstated standard GNU autoconf listing of files
-
---------------------
-0.5 (2009-01-17)
---------------------
-Update on the build process, new maintainer, git tree
-to keep the changes. Fixes in this release include
- * minor bug fixes
- * build fixups and fixes for the build process
- * a stub handler for SIGWINCH (still not fully supported)
- * adding units to the levels (lin/log)
- * tidied up code
-
---------------------
-0.4.0b (2002-12-21)
---------------------
-Last release by the original author, Jan Morgenstern.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/README.md new/wavemon-0.9.2/README.md
--- old/wavemon-0.9.1/README.md 2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/README.md 2020-10-24 17:48:43.000000000 +0200
@@ -25,35 +25,33 @@
 In addition, minimally the following are required:
 * Netlink `libnl` at least version 3.2,
 * including the Generic Netlink support (`libnl-genl`),
-* ncurses development files (`libncurses5-dev`),
+* ncurses development files (`libncursesw5-dev`),
 * the `pkg-config` package.
 
 On Debian/Ubuntu, this can be done using
 ```bash
-       apt-get -y install pkg-config libncurses5-dev libnl-3-dev 
libnl-genl-3-dev
+       apt-get -y install pkg-config libncursesw5-dev libnl-3-dev 
libnl-genl-3-dev
 ```
 
+Please note the "w" in `libncursesw5-dev`, which stands for the 
_wide-character_ variant of ncurses.
+This is required for [proper rendering on UTF-8 
terminals](https://github.com/uoaerg/wavemon/issues/70).
+
 ## How to build
 
 wavemon uses `autoconf`, so that in most cases you can simply run
-```
+```bash
        ./configure
        make
        sudo make install
 ```
 to build and install the package. Type 'make uninstall' if not happy.
-Refer to the file `INSTALL` for generic installation instructions.
 
-To grant users access to restricted networking operations (scan operations), 
use additionally
-```
+To grant users access to restricted networking operations (scan operations), 
use instead
+```bash
        sudo make install-suid-root
 ```
 If you have changed some of the autoconf files or use a git version, run
-```
+```bash
        ./config/bootstrap
 ```
 (This requires a recent installation of `autotools`.)
-
-## Bugs?
-
-Send bug reports, comments, and suggestions by opening an issue on 
[github](https://github.com/uoaerg/wavemon/issues).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/THANKS new/wavemon-0.9.2/THANKS
--- old/wavemon-0.9.1/THANKS    2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/THANKS    2020-10-24 17:48:43.000000000 +0200
@@ -35,3 +35,8 @@
 Mohammad Etemaddar suggested useful keyboard highlighting in 0.7.6. Nick Warne 
helped
 uncover a bug in the scan window which led to a complete overhaul of based on 
threads;
 he also provided useful suggestions to improve sorting of scan results (0.7.6).
+
+Since then there have been countless others, for whose help I am very grateful,
+please see the github issue and commit history for details:
+
+  https://github.com/uoaerg/wavemon
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/conf.c new/wavemon-0.9.2/conf.c
--- old/wavemon-0.9.1/conf.c    2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/conf.c    2020-10-24 17:48:43.000000000 +0200
@@ -311,7 +311,7 @@
        conf_items = ll_create();
 
        item = calloc(1, sizeof(*item));
-       item->name = strdup("Interface");
+       item->name = strdup("Input");
        item->type = t_sep;
        ll_push(conf_items, "*", item);
 
@@ -332,6 +332,16 @@
        ll_push(conf_items, "*", item);
 
        item = calloc(1, sizeof(*item));
+       item->type = t_sep;
+       ll_push(conf_items, "*", item);
+
+       /* Scan */
+       item = calloc(1, sizeof(*item));
+       item->name = strdup("Scan");
+       item->type = t_sep;
+       ll_push(conf_items, "*", item);
+
+       item = calloc(1, sizeof(*item));
        item->name      = strdup("Scan sort type");
        item->cfname    = strdup("sort_order");
        item->type      = t_list;
@@ -348,6 +358,16 @@
        ll_push(conf_items, "*", item);
 
        item = calloc(1, sizeof(*item));
+       item->type = t_sep;
+       ll_push(conf_items, "*", item);
+
+       /* Plot */
+       item = calloc(1, sizeof(*item));
+       item->name = strdup("Plot");
+       item->type = t_sep;
+       ll_push(conf_items, "*", item);
+
+       item = calloc(1, sizeof(*item));
        item->name      = strdup("Statistics updates");
        item->cfname    = strdup("stat_updates");
        item->type      = t_int;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/configure.ac new/wavemon-0.9.2/configure.ac
--- old/wavemon-0.9.1/configure.ac      2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/configure.ac      2020-10-24 17:48:43.000000000 +0200
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_PREREQ(2.64)
-AC_INIT([wavemon], [0.9.1], [https://github.com/uoaerg/wavemon], 
[wavemon-current],
+AC_INIT([wavemon], [0.9.2], [https://github.com/uoaerg/wavemon], 
[wavemon-current],
        [https://github.com/uoaerg/wavemon])
 
 
@@ -52,7 +52,9 @@
 
 # Tests involving libraries
 AC_CHECK_LIB([m], [pow], [],              [AC_MSG_ERROR(math library not 
found)])
-AC_CHECK_LIB([ncurses], [waddstr], [],    [AC_MSG_ERROR(ncurses library not 
found)])
+AC_CHECK_LIB([ncursesw], [waddstr],
+            [],
+            [AC_CHECK_LIB([ncurses], [waddstr], [], [AC_MSG_ERROR(ncurses 
library not found)])])
 AC_CHECK_LIB([pthread], [pthread_create], [CFLAGS="$CFLAGS -pthread"],
                                          [AC_MSG_ERROR(pthread library not 
found)])
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/error.c new/wavemon-0.9.2/error.c
--- old/wavemon-0.9.1/error.c   2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/error.c   2020-10-24 17:48:43.000000000 +0200
@@ -62,10 +62,10 @@
 /**
  * terminate_all_processes  -  terminate wavemon and reset screen
  * @fmt:     printf-like format string
- * @strerr:  set to non-0 if termination is due to failed system call
+ * @strerr:  set to true if termination is due to failed system call
  * @ap:             argument list for @fmt
  */
-static void terminate_all_processes(const char *fmt, int strerr, va_list ap)
+static void terminate_all_processes(const char *fmt, bool strerr, va_list ap)
 {
        int saved_errno = strerr ? errno : 0;
        /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/info_scr.c new/wavemon-0.9.2/info_scr.c
--- old/wavemon-0.9.1/info_scr.c        2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/info_scr.c        2020-10-24 17:48:43.000000000 +0200
@@ -117,6 +117,7 @@
        } else {
                qual = ewma(qual, sig_qual, conf.meter_decay / 100.0);
 
+               mvwclrtoborder(w_levels, line, 1);
                mvwaddstr(w_levels, line++, 1, "link quality: ");
                sprintf(tmp, "%0.f%%  ", (1e2 * qual)/sig_qual_max);
                waddstr_b(w_levels, tmp);
@@ -134,6 +135,7 @@
        if (sig_level != 0) {
                signal = ewma(signal, sig_level, conf.meter_decay / 100.0);
 
+               mvwclrtoborder(w_levels, line, 1);
                mvwaddstr(w_levels, line++, 1, "signal level: ");
                sprintf(tmp, "%.0f dBm (%s)", signal, dbm2units(signal));
                waddstr_b(w_levels, tmp);
@@ -159,17 +161,19 @@
 
                waddbar(w_levels, line++, noise, conf.noise_min, conf.noise_max,
                        nscale, false);
-       }
-
-       if (noise_data_valid && sig_level) {
-               ssnr = ewma(ssnr, sig_level - linkstat.data.survey.noise,
-                                 conf.meter_decay / 100.0);
 
-               mvwaddstr(w_levels, line++, 1, "SNR:           ");
-               sprintf(tmp, "%.0f dB", ssnr);
-               waddstr_b(w_levels, tmp);
+               if (sig_level) {
+                       ssnr = ewma(ssnr, sig_level - 
linkstat.data.survey.noise,
+                                         conf.meter_decay / 100.0);
+
+                       mvwaddstr(w_levels, line++, 1, "SNR:           ");
+                       sprintf(tmp, "%.0f dB", ssnr);
+                       waddstr_b(w_levels, tmp);
+               }
+       } else {
+               // Force redraw on next line (needed on some terminals).
+               mvwaddstr(w_levels, line++, 1, "");
        }
-
        wrefresh(w_levels);
 }
 
@@ -397,9 +401,10 @@
                        waddstr(w_info, ", scan: ");
                        waddstr_b(w_info, 
pretty_time_ms(linkstat.data.survey.time.scan));
                }
-       } else if (linkstat.data.tx_bitrate[0] && linkstat.data.rx_bitrate[0]) {
+       } else {
+               wclrtoborder(w_info);
                waddstr(w_info, "rx rate: ");
-               waddstr_b(w_info, linkstat.data.rx_bitrate);
+               waddstr_b(w_info, linkstat.data.rx_bitrate[0] ? 
linkstat.data.rx_bitrate : "n/a");
 
                if (linkstat.data.expected_thru) {
                        if (linkstat.data.expected_thru >= 1024)
@@ -409,7 +414,7 @@
                        waddstr(w_info, tmp);
                }
                waddstr(w_info, ", tx rate: ");
-               waddstr_b(w_info, linkstat.data.tx_bitrate);
+               waddstr_b(w_info, linkstat.data.tx_bitrate[0] ? 
linkstat.data.tx_bitrate : "n/a");
        }
 
        /* Beacons */
@@ -667,6 +672,7 @@
 void scr_info_fini(void)
 {
        sampling_stop();
+       last_update = 0;
 
        delwin(w_net);
        delwin(w_info);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/iw_if.h new/wavemon-0.9.2/iw_if.h
--- old/wavemon-0.9.1/iw_if.h   2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/iw_if.h   2020-10-24 17:48:43.000000000 +0200
@@ -251,8 +251,6 @@
        pthread_mutex_t   mutex;
 };
 
-extern void init_scan_list(struct scan_result *sr);
-extern void free_scan_list(struct scan_entry *head);
 extern void *do_scan(void *sr_ptr);
 
 /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/iw_nl80211.c new/wavemon-0.9.2/iw_nl80211.c
--- old/wavemon-0.9.1/iw_nl80211.c      2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/iw_nl80211.c      2020-10-24 17:48:43.000000000 +0200
@@ -13,7 +13,7 @@
 /**
  * handle_cmd: process @cmd
  * Returns 0 if ok, -errno < 0 on failure
- * stolen/modified from iw:iw.c 
+ * stolen/modified from iw:iw.c
  */
 int handle_cmd(struct cmd *cmd)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/iw_scan.c new/wavemon-0.9.2/iw_scan.c
--- old/wavemon-0.9.1/iw_scan.c 2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/iw_scan.c 2020-10-24 17:48:43.000000000 +0200
@@ -268,7 +268,7 @@
                .handler = scan_dump_handler
        };
 
-       memset(sr, 0, sizeof(*sr));
+       sr->max_essid_len = MAX_ESSID_LEN;
        cmd_scan_dump.handler_arg = sr;
 
        return handle_cmd(&cmd_scan_dump);
@@ -294,8 +294,7 @@
        *headp = head;
 }
 
-/** De-allocate list. Use after all threads are terminated. */
-void free_scan_list(struct scan_entry *head)
+static void free_scan_list(struct scan_entry *head)
 {
        if (head) {
                free_scan_list(head->next);
@@ -303,19 +302,6 @@
        }
 }
 
-/** Initialize scan results. Requires lock to be taken. */
-void init_scan_list(struct scan_result *sr)
-{
-       free_scan_list(sr->head);
-       free(sr->channel_stats);
-       sr->head          = NULL;
-       sr->channel_stats = NULL;
-       sr->msg[0]        = '\0';
-       sr->max_essid_len = MAX_ESSID_LEN;
-       memset(&(sr->num), 0, sizeof(sr->num));
-       sr->mutex = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;
-}
-
 /*
  *     Channel statistics shown at the bottom of scan screen.
  */
@@ -368,6 +354,36 @@
        sr->num.ch_stats = n < MAX_CH_STATS ? n : MAX_CH_STATS;
 }
 
+/*
+ *     Scan results.
+ */
+static void _clear_scan_result(struct scan_result *sr)
+{
+       free_scan_list(sr->head);
+       free(sr->channel_stats);
+
+       sr->head          = NULL;
+       sr->channel_stats = NULL;
+       sr->msg[0]        = '\0';
+       memset(&(sr->num), 0, sizeof(sr->num));
+}
+
+static void _write_warning_msg(struct scan_result *sr, const char *format, ...)
+{
+       va_list argp;
+
+       va_start(argp, format);
+
+       pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
+       pthread_mutex_lock(&sr->mutex);
+
+       _clear_scan_result(sr);
+       vsnprintf(sr->msg, sizeof(sr->msg), format, argp);
+
+       pthread_mutex_unlock(&sr->mutex);
+       pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
+}
+
 /** The actual scan thread. */
 void *do_scan(void *sr_ptr)
 {
@@ -380,64 +396,68 @@
        sigaddset(&blockmask, SIGWINCH);
        pthread_sigmask(SIG_BLOCK, &blockmask, NULL);
 
-       pthread_detach(pthread_self());
        do {
                ret = iw_nl80211_scan_trigger();
 
-               pthread_mutex_lock(&sr->mutex);
-               init_scan_list(sr);
+               if (-ret == EPERM && !has_net_admin_capability()) {
+                       _write_warning_msg(sr, "This screen requires 
CAP_NET_ADMIN permissions");
+                       pthread_exit(0);
+               } else if (-ret == ENETDOWN && !if_is_up(conf_ifname())) {
+                       _write_warning_msg(sr, "Interface %s is down - setting 
it up ...", conf_ifname());
+
+                       if (if_set_up(conf_ifname()) < 0)
+                               err_sys("Can not bring up interface '%s'", 
conf_ifname());
+                       if (atexit(if_set_down_on_exit) < 0)
+                               _write_warning_msg(sr, "Warning: unable to 
restore %s down state on exit", conf_ifname());
+                       continue;
+               }
+
                switch(-ret) {
-               case 0:
                case EBUSY:
                        /* Trigger returns -EBUSY if a scan request is pending 
or ready. */
-                       pthread_mutex_unlock(&sr->mutex);
-
-                       /* Do not hold the lock while awaiting results. */
+               case 0:
                        if (!wait_for_scan_events()) {
-                               pthread_mutex_lock(&sr->mutex);
-                               snprintf(sr->msg, sizeof(sr->msg), "Waiting for 
scan data...");
-                               pthread_mutex_unlock(&sr->mutex);
+                               _write_warning_msg(sr, "Waiting for scan 
data...");
                        } else {
-                               pthread_mutex_lock(&sr->mutex);
-                               ret = iw_nl80211_get_scan_data(sr);
+                               struct scan_result *tmp = calloc(1, 
sizeof(*tmp));
+
+                               if (!tmp)
+                                       err_sys("Out of memory");
+
+                               ret = iw_nl80211_get_scan_data(tmp);
                                if (ret < 0) {
-                                       snprintf(sr->msg, sizeof(sr->msg),
-                                                "Scan failed on %s: %s", 
conf_ifname(), strerror(-ret));
-                               } else if (!sr->head) {
-                                       snprintf(sr->msg, sizeof(sr->msg), 
"Empty scan results on %s", conf_ifname());
+                                       _write_warning_msg(sr, "Scan failed on 
%s: %s", conf_ifname(), strerror(-ret));
+                               } else if (!tmp->head) {
+                                       _write_warning_msg(sr, "Empty scan 
results on %s", conf_ifname());
+                               } else {
+                                       // Sort only when new data arrives.
+                                       compute_channel_stats(tmp);
+                                       sort_scan_list(&tmp->head);
+
+                                       
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
+                                       pthread_mutex_lock(&sr->mutex);
+
+                                       _clear_scan_result(sr);
+                                       sr->head          = tmp->head;
+                                       sr->channel_stats = tmp->channel_stats;
+                                       sr->max_essid_len = tmp->max_essid_len;
+                                       memcpy(&(sr->num), &(tmp->num), 
sizeof(tmp->num));
+
+                                       pthread_mutex_unlock(&sr->mutex);
+                                       
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
                                }
-                               compute_channel_stats(sr);
-                               pthread_mutex_unlock(&sr->mutex);
+                               free(tmp);
                        }
                        break;
-               case EPERM:
-                       if (!has_net_admin_capability())
-                               snprintf(sr->msg, sizeof(sr->msg), "This screen 
requires CAP_NET_ADMIN permissions");
-                       pthread_mutex_unlock(&sr->mutex);
-                       return NULL;
                case EFAULT:
-                       /* EFAULT can occur after a window resizing event: 
temporary, fall through. */
+                       /* EFAULT can occur after a window resizing event - 
treat as temporary error. */
                case EINTR:
                case EAGAIN:
-                       /* Temporary errors. */
-                       snprintf(sr->msg, sizeof(sr->msg), "Waiting for device 
to become ready ...");
-                       pthread_mutex_unlock(&sr->mutex);
+                       _write_warning_msg(sr, "Waiting for device to become 
ready ...");
                        break;
-               case ENETDOWN:
-                       if (!if_is_up(conf_ifname())) {
-                               snprintf(sr->msg, sizeof(sr->msg), "Interface 
%s is down - setting it up ...", conf_ifname());
-                               pthread_mutex_unlock(&sr->mutex);
-
-                               if (if_set_up(conf_ifname()) < 0)
-                                       err_sys("Can not bring up interface 
'%s'", conf_ifname());
-                               if (atexit(if_set_down_on_exit) < 0)
-                                       snprintf(sr->msg, sizeof(sr->msg), 
"Warning: unable to restore %s down state on exit", conf_ifname());
-                               break;
-                       }
-                       /* fall through */
                default:
-                       snprintf(sr->msg, sizeof(sr->msg), "Scan trigger failed 
on %s: %s", conf_ifname(), strerror(-ret));
-                       pthread_mutex_unlock(&sr->mutex);
+                       _write_warning_msg(sr, "Scan trigger failed on %s: %s", 
conf_ifname(), strerror(-ret));
+                       break;
                }
        } while (usleep(conf.stat_iv * 1000) == 0);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/lhist_scr.c new/wavemon-0.9.2/lhist_scr.c
--- old/wavemon-0.9.1/lhist_scr.c       2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/lhist_scr.c       2020-10-24 17:48:43.000000000 +0200
@@ -309,19 +309,23 @@
        waddch(w_key, ACS_HLINE);
        wattrset(w_key, COLOR_PAIR(CP_STANDARD));
 
-       wprintw(w_key, "] sig lvl (%s)  [", fmt_extrema(&e_signal, "dBm"));
+       if (e_noise.initialised && e_snr.initialised) {
+               wprintw(w_key, "] sig lvl (%s)  [", fmt_extrema(&e_signal, 
"dBm"));
 
-       wattrset(w_key, COLOR_PAIR(CP_STATNOISE));
-       waddch(w_key, ACS_HLINE);
-       wattrset(w_key, COLOR_PAIR(CP_STANDARD));
-
-       wprintw(w_key, "] ns lvl (%s)  [", fmt_extrema(&e_noise, "dBm"));
-
-       wattrset(w_key, COLOR_PAIR(CP_STATSNR));
-       waddch(w_key, ' ');
-
-       wattrset(w_key, COLOR_PAIR(CP_STANDARD));
-       wprintw(w_key, "] S-N ratio (%s)", fmt_extrema(&e_snr, "dB"));
+               wattrset(w_key, COLOR_PAIR(CP_STATNOISE));
+               waddch(w_key, ACS_HLINE);
+               wattrset(w_key, COLOR_PAIR(CP_STANDARD));
+
+               wprintw(w_key, "] ns lvl (%s)  [", fmt_extrema(&e_noise, 
"dBm"));
+
+               wattrset(w_key, COLOR_PAIR(CP_STATSNR));
+               waddch(w_key, ' ');
+
+               wattrset(w_key, COLOR_PAIR(CP_STANDARD));
+               wprintw(w_key, "] S-N ratio (%s)", fmt_extrema(&e_snr, "dB"));
+       } else {
+               wprintw(w_key, "] signal level (%s)", fmt_extrema(&e_signal, 
"dBm"));
+       }
 
        wrefresh(w_key);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/scan_scr.c new/wavemon-0.9.2/scan_scr.c
--- old/wavemon-0.9.1/scan_scr.c        2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/scan_scr.c        2020-10-24 17:48:43.000000000 +0200
@@ -19,10 +19,13 @@
  */
 #include "iw_if.h"
 
-#define START_LINE     2       /* where to begin the screen */
-
 /* GLOBALS */
-static struct scan_result sr;
+static struct scan_result sr = {
+       .head          = NULL,
+       .channel_stats = NULL,
+       .msg[0]        = '\0',
+       .mutex         = PTHREAD_MUTEX_INITIALIZER,
+};
 static pthread_t scan_thread;
 static WINDOW *w_aplst;
 
@@ -100,10 +103,10 @@
                [SO_CHAN_SIG]   = "Ch/Sg",
                [SO_OPEN_SIG]   = "Op/Sg"
        };
-       int i, col, line = START_LINE;
+       int i, col, line = 1;
        struct scan_entry *cur;
 
-       /* Scanning can take several seconds - do not refresh if locked. */
+       /* Scanning can take several seconds - do not refresh while locked. */
        if (pthread_mutex_trylock(&sr.mutex))
                return;
 
@@ -114,8 +117,6 @@
        if (!sr.head)
                waddstr_center(w_aplst, WAV_HEIGHT/2 - 1, sr.msg);
 
-       sort_scan_list(&sr.head);
-
        /* Truncate overly long access point lists to match screen height. */
        for (cur = sr.head; cur && line < MAXYLEN; line++, cur = cur->next) {
                col = CP_SCAN_NON_AP;
@@ -158,8 +159,9 @@
        sprintf(s, "%s %ssc", sort_type[conf.scan_sort_order], 
conf.scan_sort_asc ? "a" : "de");
        wadd_attr_str(w_aplst, A_REVERSE, s);
 
-       if (sr.num.entries + START_LINE > line) {
-               sprintf(s, ", %d not shown", sr.num.entries + START_LINE - 
line);
+       /* At this time line == MAXYLEN. Need to subtract 1 for the status line 
at the bottom. */
+       if (sr.num.entries > line - 1) {
+               sprintf(s, ", %d not shown", sr.num.entries - (line - 1));
                waddstr(w_aplst, s);
        }
        if (sr.num.open) {
@@ -200,10 +202,9 @@
        w_aplst = newwin_title(0, WAV_HEIGHT, "Scan window", false);
 
        /* Gathering scan data can take seconds. Inform user. */
-       mvwaddstr(w_aplst, START_LINE, 1, "Waiting for scan data ...");
+       mvwaddstr(w_aplst, 2, 1, "Waiting for scan data ...");
        wrefresh(w_aplst);
 
-       init_scan_list(&sr);
        pthread_create(&scan_thread, NULL, do_scan, &sr);
 }
 
@@ -251,8 +252,6 @@
 void scr_aplst_fini(void)
 {
        pthread_cancel(scan_thread);
-       free_scan_list(sr.head);
-       free(sr.channel_stats);
-
+       pthread_join(scan_thread, NULL);
        delwin(w_aplst);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/ui.c new/wavemon-0.9.2/ui.c
--- old/wavemon-0.9.1/ui.c      2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/ui.c      2020-10-24 17:48:43.000000000 +0200
@@ -30,6 +30,21 @@
 {
        WINDOW *win = newwin(h, WAV_WIDTH, y, 0);
 
+#ifdef HAVE_LIBNCURSESW
+       const cchar_t * top_left  = y > 0 ? WACS_LTEE : WACS_ULCORNER;
+       const cchar_t * top_right = y > 0 ? WACS_RTEE : WACS_URCORNER;
+
+       if (nobottom) {
+               mvwadd_wch(win, 0, 0, top_left);
+               mvwhline_set(win, 0, 1, WACS_HLINE, MAXXLEN);
+               mvwvline_set(win, 1, 0, WACS_VLINE, h);
+               mvwadd_wch(win, 0, WAV_WIDTH - 1, top_right);
+               mvwvline_set(win, 1, WAV_WIDTH - 1, WACS_VLINE, h);
+       } else {
+               wborder_set(win, WACS_VLINE, WACS_VLINE, WACS_HLINE, WACS_HLINE,
+                           top_left, top_right, WACS_LLCORNER, WACS_LRCORNER);
+       }
+#else
        chtype top_left  = y > 0 ? ACS_LTEE : ACS_ULCORNER;
        chtype top_right = y > 0 ? ACS_RTEE : ACS_URCORNER;
 
@@ -43,6 +58,7 @@
                wborder(win, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE,
                        top_left, top_right, ACS_LLCORNER, ACS_LRCORNER);
        }
+#endif
        wattrset(win, COLOR_PAIR(CP_WTITLE));
        mvwaddstr(win, 0, 2, title);
        wattroff(win, COLOR_PAIR(CP_WTITLE));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/wavemon.1 new/wavemon-0.9.2/wavemon.1
--- old/wavemon-0.9.1/wavemon.1 2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/wavemon.1 2020-10-24 17:48:43.000000000 +0200
@@ -1,4 +1,4 @@
-.TH wavemon 1 "September 2016" Linux "User Manuals"
+.TH wavemon 1 "October 2020" Linux "User Manuals"
 .SH NAME
 wavemon \- a wireless network monitor
 .SH SYNOPSIS
@@ -15,11 +15,11 @@
 "info" screen shows current levels as bargraphs, whereas the "level" screen
 represents the same levels as a moving histogram.
 
-On startup, you'll see (depending on configuration) one of the different
-monitor screens. At the bottom, you'll find a \fImenu-bar\fR listing the
-screens and their activating keys. Each screen is activated by either the
-corresponding function key or the key corresponding to the first character
-of the screen name. The following screens can be selected:
+On startup, you'll see (depending on configuration) one of the different 
monitor
+screens. At the bottom, you'll find a \fImenu-bar\fR listing the screens and
+their activating keys. Each screen is activated by either the corresponding
+function key (F1..10), its numeric shortcut (1..0), or the underlined initial
+letter of the screen name.  The following \fIscreens\fR can be selected:
 .TP
 .B Info (F1 or 'i')
 This is the most comprehensive screen. It displays a condensed overview of
@@ -90,6 +90,9 @@
 \fIa\fRscending, \fId\fRescending; by \fIe\fRssid, \fIs\fRignal, \fIc\fRhannel 
(\fIC\fR also with signal),
 \fIm\fRac address, or by \fIo\fRpen access (\fIO\fR also with signal).
 
+Please note that sorting order changes at the time new data comes in,
+not when the setting is activated.
+
 .TP
 .B Preferences (F7 or 'p')
 This screen allows you to change all program options such as interface and
@@ -107,9 +110,7 @@
 \fBQuit (F10 or 'q')
 Exit \fIwavemon\fR.
 .LP
-\fBNote:\fR some operations, such as displaying encryption information or 
performing scans, require
-\fBCAP_NET_ADMIN\fR privileges (see \fBcapabilities\fR(7)). For non-root 
users, these can be
-enabled by installing \fIwavemon\fR setuid-root.
+
 .SH "OPTIONS"
 .IP "\fB\-i \fIinterface\fR\fR"
 override autodetection and use the specified \fIinterface\fR.
@@ -122,15 +123,18 @@
 .IP "\fB\-v\fR"
 print version information and exit.
 .SH Troubleshooting
-wavemon will exit with \fB'no supported wireless interfaces found'\fR if no 
usable wireless interfaces
+.IP \(bu
+\fIwavemon\fR will exit with \fB'no supported wireless interfaces found'\fR if 
no usable wireless interfaces
 were detected. Check if your wireless interfaces is otherwise usable, using 
e.g. \fIiw\fR, \fIiwconfig\fR,
 or similar tools. The interface should appear in /proc/net/dev and, if 
wireless extensions are supported,
 also in /proc/net/wireless. If the interface does not appear, causes can be a 
missing (or not loaded)
 kernel module, or missing firmware, which some cards need to operate.
 
-.SH "ENVIRONMENT VARIABLES"
-.IP "LC_NUMERIC"
-Influences the grouping of numbers if set. See also \fBlocale\fR(1).
+.IP \(bu
+Some operations, such as displaying encryption information or performing 
scans, require
+\fBCAP_NET_ADMIN\fR privileges (see \fBcapabilities\fR(7)). For non-root 
users, these can be
+enabled by installing \fIwavemon\fR setuid-root.
+
 .SH FILES
 .IP $HOME/.wavemonrc
 The local per-user configuration file.
@@ -144,5 +148,4 @@
 .BR wavemonrc (5),
 .BR wireless (7),
 .BR ethers (5),
-.BR locale (1),
 .BR capabilities (7)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/wavemon.c new/wavemon-0.9.2/wavemon.c
--- old/wavemon-0.9.1/wavemon.c 2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/wavemon.c 2020-10-24 17:48:43.000000000 +0200
@@ -18,6 +18,7 @@
  * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 #include "wavemon.h"
+#include <locale.h>
 #include <setjmp.h>
 
 /* GLOBALS */
@@ -148,6 +149,8 @@
        if (!isatty(STDIN_FILENO))
                errx(1, "input is not from a terminal");
 
+       setlocale(LC_ALL, "");
+
        /* initialize the ncurses interface */
        initscr();
        noecho();
@@ -234,32 +237,39 @@
 
                                /* Main menu */
                                switch (key) {
-                               case 'i':
                                case KEY_F(1):
+                               case '1':
+                               case 'i':
                                        next = SCR_INFO;
                                        break;
-                               case 'l':
                                case KEY_F(2):
+                               case '2':
+                               case 'l':
                                        next = SCR_LHIST;
                                        break;
-                               case 's':
                                case KEY_F(3):
+                               case 's':
+                               case '3':
                                        next = SCR_SCAN;
                                        break;
-                               case 'p':
                                case KEY_F(7):
+                               case 'p':
+                               case '7':
                                        next = SCR_PREFS;
                                        break;
-                               case 'h':
                                case KEY_F(8):
+                               case 'h':
+                               case '8':
                                        next = SCR_HELP;
                                        break;
-                               case 'a':
                                case KEY_F(9):
+                               case 'a':
+                               case '9':
                                        next = SCR_ABOUT;
                                        break;
-                               case 'q':
                                case KEY_F(10):
+                               case 'q':
+                               case '0':
                                        next = SCR_QUIT;
                                }
                        } while (next == cur);
@@ -284,6 +294,7 @@
                clear();
                refresh();
        }
+       curs_set(1);
        endwin();
 
        return EXIT_SUCCESS;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wavemon-0.9.1/wavemon.h new/wavemon-0.9.2/wavemon.h
--- old/wavemon-0.9.1/wavemon.h 2019-12-30 00:45:44.000000000 +0100
+++ new/wavemon-0.9.2/wavemon.h 2020-10-24 17:48:43.000000000 +0200
@@ -34,7 +34,12 @@
 #include <ctype.h>
 #include <math.h>
 #include <stdbool.h>
+#ifdef HAVE_LIBNCURSESW
+#define _XOPEN_SOURCE_EXTENDED
+#include <ncursesw/curses.h>
+#else
 #include <ncurses.h>
+#endif
 
 #include "llist.h"
 


Reply via email to