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);