Package: wavemon
Version: 0.9.1-1+b1
Severity: normal
Tags: patch

Dear Maintainer,

Despite what the NEWS file says, Wavemon does not actually use the
curtail() function it defines to prevent long lines from spilling into
the next line. While this is noticeable mostly on the rx/tx rate line
-- which can be extremely long -- almost all printed lines will show
the bug when the terminal is resized to a narrower width.

I've included a patch which creates a new wrapper for waddstr() called
border_waddstr() which first checks if the text would overwrite the
border on the right side and then truncates the string to be precisely
the right size. Truncation is done using the curtail() function which
puts a ~ in the middle of the line to represent elision. 

Additionally, I've split Rx rate and Tx rate onto separate lines as
each one is plenty long on its own. 

*** End of the template - remove these template lines ***


-- System Information:
Debian Release: 11.1
  APT prefers stable-security
  APT policy: (500, 'stable-security'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 5.10.0-8-amd64 (SMP w/48 CPU threads)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages wavemon depends on:
ii  libc6             2.31-13+deb11u2
ii  libncurses6       6.2+20201114-2
ii  libnl-3-200       3.4.0-1+b1
ii  libnl-genl-3-200  3.4.0-1+b1
ii  libtinfo6         6.2+20201114-2

wavemon recommends no packages.

wavemon suggests no packages.

-- no debconf information
Common subdirectories: wavemon-0.9.1.orig/config and wavemon-0.9.1/config
Only in wavemon-0.9.1: config.log
Only in wavemon-0.9.1: config.status
Common subdirectories: wavemon-0.9.1.orig/debian and wavemon-0.9.1/debian
diff -u wavemon-0.9.1.orig/info_scr.c wavemon-0.9.1/info_scr.c
--- wavemon-0.9.1.orig/info_scr.c       2019-12-29 15:45:44.000000000 -0800
+++ wavemon-0.9.1/info_scr.c    2021-10-16 23:21:59.135328910 -0700
@@ -119,9 +119,9 @@
 
                mvwaddstr(w_levels, line++, 1, "link quality: ");
                sprintf(tmp, "%0.f%%  ", (1e2 * qual)/sig_qual_max);
-               waddstr_b(w_levels, tmp);
+               border_waddstr_b(w_levels, tmp);
                sprintf(tmp, "(%0.f/%d)  ", qual, sig_qual_max);
-               waddstr(w_levels, tmp);
+               border_waddstr(w_levels, tmp);
 
                waddbar(w_levels, line++, qual, 0, sig_qual_max, lvlscale, 
true);
        }
@@ -136,7 +136,7 @@
 
                mvwaddstr(w_levels, line++, 1, "signal level: ");
                sprintf(tmp, "%.0f dBm (%s)", signal, dbm2units(signal));
-               waddstr_b(w_levels, tmp);
+               border_waddstr_b(w_levels, tmp);
 
                waddbar(w_levels, line, signal, conf.sig_min, conf.sig_max,
                        lvlscale, true);
@@ -155,7 +155,7 @@
 
                mvwaddstr(w_levels, line++, 1, "noise level:  ");
                sprintf(tmp, "%.0f dBm (%s)", noise, dbm2units(noise));
-               waddstr_b(w_levels, tmp);
+               border_waddstr_b(w_levels, tmp);
 
                waddbar(w_levels, line++, noise, conf.noise_min, conf.noise_max,
                        nscale, false);
@@ -167,7 +167,7 @@
 
                mvwaddstr(w_levels, line++, 1, "SNR:           ");
                sprintf(tmp, "%.0f dB", ssnr);
-               waddstr_b(w_levels, tmp);
+               border_waddstr_b(w_levels, tmp);
        }
 
        wrefresh(w_levels);
@@ -185,15 +185,15 @@
        if (linkstat.data.rx_packets) {
                sprintf(tmp, "%s (%s)", int_counts(linkstat.data.rx_packets),
                        byte_units(linkstat.data.rx_bytes));
-               waddstr_b(w_stats, tmp);
+               border_waddstr_b(w_stats, tmp);
        } else {
-               waddstr(w_stats, "n/a");
+               border_waddstr(w_stats, "n/a");
        }
 
        if (iw_nl80211_have_survey_data(&linkstat.data)) {
                if (linkstat.data.rx_bitrate[0]) {
-                       waddstr(w_stats, ", rate: ");
-                       waddstr_b(w_stats, linkstat.data.rx_bitrate);
+                       border_waddstr(w_stats, ", rate: ");
+                       border_waddstr_b(w_stats, linkstat.data.rx_bitrate);
                }
 
                if (linkstat.data.expected_thru) {
@@ -201,15 +201,15 @@
                                sprintf(tmp, " (expected: %.1f MB/s)",  
linkstat.data.expected_thru/1024.0);
                        else
                                sprintf(tmp, " (expected: %u kB/s)",  
linkstat.data.expected_thru);
-                       waddstr(w_stats, tmp);
+                       border_waddstr(w_stats, tmp);
                }
        }
 
        if (linkstat.data.rx_drop_misc) {
-               waddstr(w_stats, ", drop: ");
+               border_waddstr(w_stats, ", drop: ");
                sprintf(tmp, "%'llu (%.1f%%)", (unsigned long 
long)linkstat.data.rx_drop_misc,
                                (1e2 * 
linkstat.data.rx_drop_misc)/linkstat.data.rx_packets);
-               waddstr_b(w_stats, tmp);
+               border_waddstr_b(w_stats, tmp);
        }
 
        wclrtoborder(w_stats);
@@ -222,26 +222,26 @@
        if (linkstat.data.tx_packets) {
                sprintf(tmp, "%s (%s)", int_counts(linkstat.data.tx_packets),
                        byte_units(linkstat.data.tx_bytes));
-               waddstr_b(w_stats, tmp);
+               border_waddstr_b(w_stats, tmp);
        } else {
-               waddstr(w_stats, "n/a");
+               border_waddstr(w_stats, "n/a");
        }
 
        if (iw_nl80211_have_survey_data(&linkstat.data) && 
linkstat.data.tx_bitrate[0]) {
-               waddstr(w_stats, ", rate: ");
-               waddstr_b(w_stats, linkstat.data.tx_bitrate);
+               border_waddstr(w_stats, ", rate: ");
+               border_waddstr_b(w_stats, linkstat.data.tx_bitrate);
        }
 
        if (linkstat.data.tx_retries) {
-               waddstr(w_stats, ", retries: ");
+               border_waddstr(w_stats, ", retries: ");
                sprintf(tmp, "%s (%.1f%%)", 
int_counts(linkstat.data.tx_retries),
                        (1e2 * 
linkstat.data.tx_retries)/linkstat.data.tx_packets);
-               waddstr_b(w_stats, tmp);
+               border_waddstr_b(w_stats, tmp);
        }
 
        if (linkstat.data.tx_failed) {
-               waddstr(w_stats, ", failed: ");
-               waddstr_b(w_stats, int_counts(linkstat.data.tx_failed));
+               border_waddstr(w_stats, ", failed: ");
+               border_waddstr_b(w_stats, int_counts(linkstat.data.tx_failed));
        }
        wclrtoborder(w_stats);
        wrefresh(w_stats);
@@ -264,28 +264,28 @@
         * Interface Part
         */
        wmove(w_if, 1, 1);
-       waddstr_b(w_if, conf_ifname());
+       border_waddstr_b(w_if, conf_ifname());
        sprintf(tmp, " (%s)", info.name);
-       waddstr(w_if, tmp);
+       border_waddstr(w_if, tmp);
 
        /* PHY */
-       waddstr(w_if, ", phy ");
+       border_waddstr(w_if, ", phy ");
        sprintf(tmp, "%d", ifs.phy);
-       waddstr_b(w_if, tmp);
+       border_waddstr_b(w_if, tmp);
 
        /* Regulatory domain */
-       waddstr(w_if, ", reg: ");
+       border_waddstr(w_if, ", reg: ");
        if (ir.region > 0) {
-               waddstr_b(w_if, ir.country);
+               border_waddstr_b(w_if, ir.country);
                sprintf(tmp, " (%s)", dfs_domain_name(ir.region));
-               waddstr(w_if, tmp);
+               border_waddstr(w_if, tmp);
        } else {
-               waddstr_b(w_if, "n/a");
+               border_waddstr_b(w_if, "n/a");
        }
 
        if (ifs.ssid[0]) {
-               waddstr(w_if, ", SSID: ");
-               waddstr_b(w_if, ifs.ssid);
+               border_waddstr(w_if, ", SSID: ");
+               border_waddstr_b(w_if, ifs.ssid);
        }
 
        wclrtoborder(w_if);
@@ -295,35 +295,35 @@
         * Info window:
         */
        wmove(w_info, 1, 1);
-       waddstr(w_info, "mode: ");
-       waddstr_b(w_info, iftype_name(ifs.iftype));
+       border_waddstr(w_info, "mode: ");
+       border_waddstr_b(w_info, iftype_name(ifs.iftype));
 
        if (!ether_addr_is_zero(&linkstat.data.bssid)) {
-               waddstr_b(w_info, ", ");
+               border_waddstr_b(w_info, ", ");
 
                switch (linkstat.data.status) {
                case NL80211_BSS_STATUS_ASSOCIATED:
-                       waddstr(w_info, "connected to: ");
+                       border_waddstr(w_info, "connected to: ");
                        break;
                case NL80211_BSS_STATUS_AUTHENTICATED:
-                       waddstr(w_info, "authenticated with: ");
+                       border_waddstr(w_info, "authenticated with: ");
                        break;
                case NL80211_BSS_STATUS_IBSS_JOINED:
-                       waddstr(w_info, "joined IBSS: ");
+                       border_waddstr(w_info, "joined IBSS: ");
                        break;
                default:
-                       waddstr(w_info, "station: ");
+                       border_waddstr(w_info, "station: ");
                }
-               waddstr_b(w_info, ether_lookup(&linkstat.data.bssid));
+               border_waddstr_b(w_info, ether_lookup(&linkstat.data.bssid));
 
                if (linkstat.data.status == NL80211_BSS_STATUS_ASSOCIATED) {
-                       waddstr_b(w_info, ",");
-                       waddstr(w_info, " time: ");
-                       waddstr_b(w_info, 
pretty_time(linkstat.data.connected_time));
+                       border_waddstr_b(w_info, ",");
+                       border_waddstr(w_info, " time: ");
+                       border_waddstr_b(w_info, 
pretty_time(linkstat.data.connected_time));
 
-                       waddstr(w_info, ", inactive: ");
+                       border_waddstr(w_info, ", inactive: ");
                        sprintf(tmp, "%.1fs", 
(float)linkstat.data.inactive_time/1e3);
-                       waddstr_b(w_info, tmp);
+                       border_waddstr_b(w_info, tmp);
                }
        }
        wclrtoborder(w_info);
@@ -331,203 +331,204 @@
        wmove(w_info, 2, 1);
        /* Frequency / channel */
        if (ifs.freq) {
-               waddstr(w_info, "freq: ");
+               border_waddstr(w_info, "freq: ");
                sprintf(tmp, "%d MHz", ifs.freq);
-               waddstr_b(w_info, tmp);
+               border_waddstr_b(w_info, tmp);
 
                /* The following condition should in theory never happen */
                if (linkstat.data.survey.freq && linkstat.data.survey.freq != 
ifs.freq) {
                        sprintf(tmp, " [survey freq: %d MHz]", 
linkstat.data.survey.freq);
-                       waddstr(w_info, tmp);
+                       border_waddstr(w_info, tmp);
                }
 
                if (ifs.freq_ctr1 && ifs.freq_ctr1 != ifs.freq) {
-                       waddstr(w_info, ", ctr1: ");
+                       border_waddstr(w_info, ", ctr1: ");
                        sprintf(tmp, "%d MHz", ifs.freq_ctr1);
-                       waddstr_b(w_info, tmp);
+                       border_waddstr_b(w_info, tmp);
                }
                if (ifs.freq_ctr2 && ifs.freq_ctr2 != ifs.freq_ctr1 && 
ifs.freq_ctr2 != ifs.freq) {
-                       waddstr(w_info, ", ctr2: ");
+                       border_waddstr(w_info, ", ctr2: ");
                        sprintf(tmp, "%d MHz", ifs.freq_ctr2);
-                       waddstr_b(w_info, tmp);
+                       border_waddstr_b(w_info, tmp);
                }
 
-               waddstr(w_info, ", channel: ");
+               border_waddstr(w_info, ", channel: ");
                sprintf(tmp, "%d", ieee80211_frequency_to_channel(ifs.freq));
-               waddstr_b(w_info, tmp);
+               border_waddstr_b(w_info, tmp);
 
                if (ifs.chan_width >= 0) {
                        sprintf(tmp, " (width: %s)", 
channel_width_name(ifs.chan_width));
-                       waddstr(w_info, tmp);
+                       border_waddstr(w_info, tmp);
                } else if (ifs.chan_type >= 0) {
                        sprintf(tmp, " (%s)", channel_type_name(ifs.chan_type));
-                       waddstr(w_info, tmp);
+                       border_waddstr(w_info, tmp);
                }
        } else if (iw_nl80211_have_survey_data(&linkstat.data)) {
-               waddstr(w_info, "freq: ");
+               border_waddstr(w_info, "freq: ");
                sprintf(tmp, "%d MHz", linkstat.data.survey.freq);
-               waddstr_b(w_info, tmp);
+               border_waddstr_b(w_info, tmp);
        } else {
-               waddstr(w_info, "frequency/channel: n/a");
+               border_waddstr(w_info, "frequency/channel: n/a");
        }
        wclrtoborder(w_info);
 
        /* Channel data */
        wmove(w_info, 3, 1);
        if (iw_nl80211_have_survey_data(&linkstat.data)) {
-               waddstr(w_info, "channel ");
-               waddstr(w_info, "active: ");
-               waddstr_b(w_info, 
pretty_time_ms(linkstat.data.survey.time.active));
+               border_waddstr(w_info, "channel ");
+               border_waddstr(w_info, "active: ");
+               border_waddstr_b(w_info, 
pretty_time_ms(linkstat.data.survey.time.active));
 
-               waddstr(w_info, ", busy: ");
-               waddstr_b(w_info, 
pretty_time_ms(linkstat.data.survey.time.busy));
+               border_waddstr(w_info, ", busy: ");
+               border_waddstr_b(w_info, 
pretty_time_ms(linkstat.data.survey.time.busy));
 
                if (linkstat.data.survey.time.ext_busy) {
-                       waddstr(w_info, ", ext-busy: ");
-                       waddstr_b(w_info, 
pretty_time_ms(linkstat.data.survey.time.ext_busy));
+                       border_waddstr(w_info, ", ext-busy: ");
+                       border_waddstr_b(w_info, 
pretty_time_ms(linkstat.data.survey.time.ext_busy));
                }
 
-               waddstr(w_info, ", rx: ");
-               waddstr_b(w_info, pretty_time_ms(linkstat.data.survey.time.rx));
+               border_waddstr(w_info, ", rx: ");
+               border_waddstr_b(w_info, 
pretty_time_ms(linkstat.data.survey.time.rx));
 
-               waddstr(w_info, ", tx: ");
-               waddstr_b(w_info, pretty_time_ms(linkstat.data.survey.time.tx));
+               border_waddstr(w_info, ", tx: ");
+               border_waddstr_b(w_info, 
pretty_time_ms(linkstat.data.survey.time.tx));
 
                if (linkstat.data.survey.time.scan) {
-                       waddstr(w_info, ", scan: ");
-                       waddstr_b(w_info, 
pretty_time_ms(linkstat.data.survey.time.scan));
+                       border_waddstr(w_info, ", scan: ");
+                       border_waddstr_b(w_info, 
pretty_time_ms(linkstat.data.survey.time.scan));
                }
        } else if (linkstat.data.tx_bitrate[0] && linkstat.data.rx_bitrate[0]) {
-               waddstr(w_info, "rx rate: ");
-               waddstr_b(w_info, linkstat.data.rx_bitrate);
+               border_waddstr(w_info, "rx rate: ");
+               border_waddstr_b(w_info, linkstat.data.rx_bitrate);
 
                if (linkstat.data.expected_thru) {
                        if (linkstat.data.expected_thru >= 1024)
                                sprintf(tmp, " (exp: %.1f MB/s)",  
linkstat.data.expected_thru/1024.0);
                        else
                                sprintf(tmp, " (exp: %u kB/s)",  
linkstat.data.expected_thru);
-                       waddstr(w_info, tmp);
+                       border_waddstr(w_info, tmp);
                }
-               waddstr(w_info, ", tx rate: ");
-               waddstr_b(w_info, linkstat.data.tx_bitrate);
+               wmove(w_info, 4, 1);
+               border_waddstr(w_info, "tx rate: ");
+               border_waddstr_b(w_info, linkstat.data.tx_bitrate);
        }
 
        /* Beacons */
-       wmove(w_info, 4, 1);
+       wmove(w_info, 5, 1);
 
        if (linkstat.data.beacons) {
-               waddstr(w_info, "beacons: ");
+               border_waddstr(w_info, "beacons: ");
                sprintf(tmp, "%'llu", (unsigned long 
long)linkstat.data.beacons);
-               waddstr_b(w_info, tmp);
+               border_waddstr_b(w_info, tmp);
 
                if (linkstat.data.beacon_loss) {
-                       waddstr(w_info, ", lost: ");
-                       waddstr_b(w_info, 
int_counts(linkstat.data.beacon_loss));
+                       border_waddstr(w_info, ", lost: ");
+                       border_waddstr_b(w_info, 
int_counts(linkstat.data.beacon_loss));
                }
-               waddstr(w_info, ", avg sig: ");
+               border_waddstr(w_info, ", avg sig: ");
                sprintf(tmp, "%d dBm", (int8_t)linkstat.data.beacon_avg_sig);
-               waddstr_b(w_info, tmp);
+               border_waddstr_b(w_info, tmp);
 
-               waddstr(w_info, ", interval: ");
+               border_waddstr(w_info, ", interval: ");
                sprintf(tmp, "%.1fs", (linkstat.data.beacon_int * 1024.0)/1e6);
-               waddstr_b(w_info, tmp);
+               border_waddstr_b(w_info, tmp);
 
-               waddstr(w_info, ", DTIM: ");
+               border_waddstr(w_info, ", DTIM: ");
                sprintf(tmp, "%u", linkstat.data.dtim_period);
-               waddstr_b(w_info, tmp);
+               border_waddstr_b(w_info, tmp);
        } else {
-               waddstr(w_info, "station flags:");
+               border_waddstr(w_info, "station flags:");
                if (linkstat.data.cts_protection)
-                       waddstr_b(w_info, " CTS");
+                       border_waddstr_b(w_info, " CTS");
                if (linkstat.data.wme)
-                       waddstr_b(w_info, " WME");
+                       border_waddstr_b(w_info, " WME");
                if (linkstat.data.tdls)
-                       waddstr_b(w_info, " TDLS");
+                       border_waddstr_b(w_info, " TDLS");
                if (linkstat.data.mfp)
-                       waddstr_b(w_info, " MFP");
+                       border_waddstr_b(w_info, " MFP");
                if (!(linkstat.data.cts_protection | linkstat.data.wme | 
linkstat.data.tdls | linkstat.data.mfp))
-                       waddstr_b(w_info, " (none)");
-               waddstr(w_info, ", preamble:");
+                       border_waddstr_b(w_info, " (none)");
+               border_waddstr(w_info, ", preamble:");
                if (linkstat.data.long_preamble)
-                       waddstr_b(w_info, " long");
+                       border_waddstr_b(w_info, " long");
                else
-                       waddstr_b(w_info, " short");
-               waddstr(w_info, ", slot:");
+                       border_waddstr_b(w_info, " short");
+               border_waddstr(w_info, ", slot:");
                if (linkstat.data.short_slot_time)
-                       waddstr_b(w_info, " short");
+                       border_waddstr_b(w_info, " short");
                else
-                       waddstr_b(w_info, " long");
+                       border_waddstr_b(w_info, " long");
        }
 
        if (info.cap_sens) {
-               waddstr(w_info, ",  sensitivity: ");
+               border_waddstr(w_info, ",  sensitivity: ");
                if (info.sens < 0)
                        sprintf(tmp, "%d dBm", info.sens);
                else
                        sprintf(tmp, "%d/%d", info.sens,
                                range.sensitivity);
-               waddstr_b(w_info, tmp);
+               border_waddstr_b(w_info, tmp);
        }
 
        wclrtoborder(w_info);
 
-       wmove(w_info, 5, 1);
-       waddstr(w_info, "power mgt: ");
+       wmove(w_info, 6, 1);
+       border_waddstr(w_info, "power mgt: ");
        if (info.cap_power)
-               waddstr_b(w_info, format_power(&info.power, &range));
+               border_waddstr_b(w_info, format_power(&info.power, &range));
        else
-               waddstr(w_info, "n/a");
+               border_waddstr(w_info, "n/a");
 
        if (info.cap_txpower && info.txpower.disabled) {
-               waddstr(w_info, ",  tx-power: off");
+               border_waddstr(w_info, ",  tx-power: off");
        } else if (info.cap_txpower) {
                /*
                 * Convention: auto-selected values start with a capital
                 *             letter, otherwise with a small letter.
                 */
                if (info.txpower.fixed)
-                       waddstr(w_info, ",  tx-power: ");
+                       border_waddstr(w_info, ",  tx-power: ");
                else
-                       waddstr(w_info, ",  TX-power: ");
-               waddstr_b(w_info, format_txpower(&info.txpower));
+                       border_waddstr(w_info, ",  TX-power: ");
+               border_waddstr_b(w_info, format_txpower(&info.txpower));
        }
        wclrtoborder(w_info);
 
-       wmove(w_info, 6, 1);
-       waddstr(w_info, "retry: ");
+       wmove(w_info, 7, 1);
+       border_waddstr(w_info, "retry: ");
        if (info.cap_retry)
-               waddstr_b(w_info, format_retry(&info.retry, &range));
+               border_waddstr_b(w_info, format_retry(&info.retry, &range));
        else
-               waddstr(w_info, "n/a");
+               border_waddstr(w_info, "n/a");
 
-       waddstr(w_info, ",  ");
+       border_waddstr(w_info, ",  ");
        if (info.cap_rts) {
-               waddstr(w_info, info.rts.fixed ? "rts/cts: " : "RTS/cts: ");
+               border_waddstr(w_info, info.rts.fixed ? "rts/cts: " : "RTS/cts: 
");
                if (info.rts.disabled)
                        sprintf(tmp, "off");
                else
                        sprintf(tmp, "%d B", info.rts.value);
-               waddstr_b(w_info, tmp);
+               border_waddstr_b(w_info, tmp);
        } else {
-               waddstr(w_info, "rts/cts: n/a");
+               border_waddstr(w_info, "rts/cts: n/a");
        }
 
-       waddstr(w_info, ",  ");
+       border_waddstr(w_info, ",  ");
        if (info.cap_frag) {
-               waddstr(w_info, info.frag.fixed ? "frag: " : "Frag: ");
+               border_waddstr(w_info, info.frag.fixed ? "frag: " : "Frag: ");
                if (info.frag.disabled)
                        sprintf(tmp, "off");
                else
                        sprintf(tmp, "%d B", info.frag.value);
-               waddstr_b(w_info, tmp);
+               border_waddstr_b(w_info, tmp);
        } else {
-               waddstr(w_info, "frag: n/a");
+               border_waddstr(w_info, "frag: n/a");
        }
        wclrtoborder(w_info);
 
        /* FIXME: re-enable encryption information (issue #8)
-       wmove(w_info, 7, 1);
-       waddstr(w_info, "encryption: ");
+       wmove(w_info, 8, 1);
+       border_waddstr(w_info, "encryption: ");
        */
 
        wclrtoborder(w_info);
@@ -544,83 +545,83 @@
        wmove(w_net, 1, 1);
        wclrtoborder(w_net);
        if (getmaxy(w_net) == WH_NET_MAX) {
-               waddstr(w_net, conf_ifname());
+               border_waddstr(w_net, conf_ifname());
 
-               waddstr_b(w_net, " (");
-               waddstr(w_net, info.flags & IFF_UP ? "UP" : "DOWN");
+               border_waddstr_b(w_net, " (");
+               border_waddstr(w_net, info.flags & IFF_UP ? "UP" : "DOWN");
                if (info.flags & IFF_RUNNING)           /* Interface RFC2863 
OPER_UP    */
-                       waddstr(w_net, " RUNNING");
+                       border_waddstr(w_net, " RUNNING");
 #ifdef IFF_LOWER_UP    /* Linux 2.6.17 */
                if (info.flags & IFF_LOWER_UP)          /* Driver signals L1 up 
        */
-                       waddstr(w_net, " LOWER_UP");
+                       border_waddstr(w_net, " LOWER_UP");
 #endif
 #ifdef IFF_DORMANT     /* Linux 2.6.17 */
                if (info.flags & IFF_DORMANT)           /* Driver signals 
dormant       */
-                       waddstr(w_net, " DORMANT");
+                       border_waddstr(w_net, " DORMANT");
 #endif
                if (info.flags & IFF_MASTER)            /* Master of a load 
balancer    */
-                       waddstr(w_net, " MASTER");
+                       border_waddstr(w_net, " MASTER");
                if (info.flags & IFF_SLAVE)             /* Slave of a load 
balancer     */
-                       waddstr(w_net, " SLAVE");
+                       border_waddstr(w_net, " SLAVE");
                if (info.flags & IFF_POINTOPOINT)       /* Is a point-to-point 
link     */
-                       waddstr(w_net, " POINTOPOINT");
+                       border_waddstr(w_net, " POINTOPOINT");
                if (info.flags & IFF_DYNAMIC)           /* Address is volatile  
        */
-                       waddstr(w_net, " DYNAMIC");
+                       border_waddstr(w_net, " DYNAMIC");
                if (info.flags & IFF_BROADCAST)         /* Valid broadcast 
address set  */
-                       waddstr(w_net, " BROADCAST");
+                       border_waddstr(w_net, " BROADCAST");
                if (info.flags & IFF_MULTICAST)         /* Supports multicast   
        */
-                       waddstr(w_net, " MULTICAST");
+                       border_waddstr(w_net, " MULTICAST");
                if (info.flags & IFF_ALLMULTI)          /* Receive all mcast  
packets   */
-                       waddstr(w_net, " ALLMULTI");
+                       border_waddstr(w_net, " ALLMULTI");
                if (info.flags & IFF_NOARP)             /* No ARP protocol      
        */
-                       waddstr(w_net, " NOARP");
+                       border_waddstr(w_net, " NOARP");
                if (info.flags & IFF_NOTRAILERS)        /* Avoid use of 
trailers        */
-                       waddstr(w_net, " NOTRAILERS");
+                       border_waddstr(w_net, " NOTRAILERS");
                if (info.flags & IFF_PROMISC)           /* Is in promiscuous 
mode       */
-                       waddstr(w_net, " PROMISC");
+                       border_waddstr(w_net, " PROMISC");
                if (info.flags & IFF_DEBUG)             /* Internal debugging 
flag      */
-                       waddstr(w_net, " DEBUG");
-               waddstr_b(w_net, ")");
+                       border_waddstr(w_net, " DEBUG");
+               border_waddstr_b(w_net, ")");
 
                wmove(w_net, 2, 1);
                wclrtoborder(w_net);
        }
-       waddstr(w_net, "mac: ");
-       waddstr_b(w_net, ether_lookup(&info.hwaddr));
+       border_waddstr(w_net, "mac: ");
+       border_waddstr_b(w_net, ether_lookup(&info.hwaddr));
 
        if (getmaxy(w_net) == WH_NET_MAX) {
-               waddstr(w_net, ", qlen: ");
+               border_waddstr(w_net, ", qlen: ");
                sprintf(tmp, "%u", info.txqlen);
-               waddstr_b(w_net, tmp);
+               border_waddstr_b(w_net, tmp);
 
                wmove(w_net, 3, 1);
                wclrtoborder(w_net);
        } else {
-               waddstr(w_net, ", ");
+               border_waddstr(w_net, ", ");
        }
-       waddstr(w_net, "ip: ");
+       border_waddstr(w_net, "ip: ");
 
        if (!info.addr.s_addr) {
-               waddstr(w_net, "n/a");
+               border_waddstr(w_net, "n/a");
        } else {
                sprintf(tmp, "%s/%u", inet_ntoa(info.addr),
                                      prefix_len(&info.netmask));
-               waddstr_b(w_net, tmp);
+               border_waddstr_b(w_net, tmp);
 
                /* only show bcast address if not set to the obvious default */
                if (info.bcast.s_addr !=
                    (info.addr.s_addr | ~info.netmask.s_addr)) {
-                       waddstr(w_net, ",  bcast: ");
-                       waddstr_b(w_net, inet_ntoa(info.bcast));
+                       border_waddstr(w_net, ",  bcast: ");
+                       border_waddstr_b(w_net, inet_ntoa(info.bcast));
                }
        }
        wclrtoborder(w_net);
 
        /* 802.11 MTU may be greater than Ethernet MTU (1500) */
        if (info.mtu && info.mtu != ETH_DATA_LEN) {
-               waddstr(w_net, ",  mtu: ");
+               border_waddstr(w_net, ",  mtu: ");
                sprintf(tmp, "%u", info.mtu);
-               waddstr_b(w_net, tmp);
+               border_waddstr_b(w_net, tmp);
        }
 
        wrefresh(w_net);
Only in wavemon-0.9.1: Makefile
Common subdirectories: wavemon-0.9.1.orig/.pc and wavemon-0.9.1/.pc
diff -u wavemon-0.9.1.orig/ui.c wavemon-0.9.1/ui.c
--- wavemon-0.9.1.orig/ui.c     2019-12-29 15:45:44.000000000 -0800
+++ wavemon-0.9.1/ui.c  2021-10-16 23:26:30.813584303 -0700
@@ -46,7 +46,6 @@
        wattrset(win, COLOR_PAIR(CP_WTITLE));
        mvwaddstr(win, 0, 2, title);
        wattroff(win, COLOR_PAIR(CP_WTITLE));
-
        return win;
 }
 
@@ -110,6 +109,26 @@
        return out_buf;
 }
 
+/* Print @str in @win, but curtail 1 character before the window's right edge 
*/
+int border_waddstr(WINDOW *win, const char *str)
+{
+  int cur_x, max_x, dummy;
+  getyx(win, dummy, cur_x);
+  getmaxyx(win, dummy, max_x);
+  if ((max_x - cur_x - 1) <= 0) return 0;
+  return (waddstr(win, curtail(str, NULL, max_x-cur_x-1)));
+}
+
+/* Same as border_waddstr, but in bold */
+void border_waddstr_b(WINDOW *win, const char *str)
+{
+  int cur_x, max_x, dummy;
+  getyx(win, dummy, cur_x);
+  getmaxyx(win, dummy, max_x);
+  if ((max_x - cur_x - 1) <= 0) return;
+  waddstr_b(win, curtail(str, NULL, max_x-cur_x-1));
+}
+
 static double interpolate(const double val, const double min, const double max)
 {
        return  val < min ? 0 :
diff -u wavemon-0.9.1.orig/wavemon.h wavemon-0.9.1/wavemon.h
--- wavemon-0.9.1.orig/wavemon.h        2019-12-29 15:45:44.000000000 -0800
+++ wavemon-0.9.1/wavemon.h     2021-10-16 23:24:17.348565296 -0700
@@ -51,7 +51,7 @@
        WH_IFACE    = 2,        /* 'Interface' area at the top */
        WH_LEVEL    = 9,        /* Level meters */
        WH_STATS    = 3,        /* WiFi statistics area */
-       WH_INFO_MIN = 7,        /* WiFi information area */
+       WH_INFO_MIN = 8,        /* WiFi information area */
        WH_NET_MIN  = 3,        /* Network interface information area */
        WH_NET_MAX  = 5,        /* Network interface information area */
        WH_MENU     = 1         /* Menu bar at the bottom */
@@ -235,6 +235,8 @@
 {
        wadd_attr_str(win, A_BOLD, s);
 }
+extern int border_waddstr(WINDOW * win, const char *s);
+extern void border_waddstr_b(WINDOW * win, const char *s);
 
 extern void waddstr_center(WINDOW * win, int y, const char *s);
 extern const char *curtail(const char *str, const char *sep, int len);

Reply via email to