aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs21
-rw-r--r--src/print.rs40
2 files changed, 31 insertions, 30 deletions
diff --git a/src/main.rs b/src/main.rs
index 675634d..d7fae43 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -17,8 +17,14 @@ use print::{print_legende_line, print_ping_line, print_stats};
use state::State;
use stats::compute_stats;
-fn main_loop(args : &Args, states: &mut Vec<State>, target: &IpAddr, tx: &mpsc::Sender<PingResult>, rx: &mut mpsc::Receiver<PingResult>, packet_id: &mut u32) {
-
+fn main_loop(
+ args: &Args,
+ states: &mut Vec<State>,
+ target: &IpAddr,
+ tx: &mpsc::Sender<PingResult>,
+ rx: &mut mpsc::Receiver<PingResult>,
+ packet_id: &mut u32,
+) {
let current_time = State::current_time_ms();
for state in states.iter_mut() {
if let State::NotYetReceived { time_sent } = state {
@@ -70,9 +76,9 @@ fn main_loop(args : &Args, states: &mut Vec<State>, target: &IpAddr, tx: &mpsc::
// Put the cursor back up
if !std::process::Command::new("tput")
.arg("rc")
- .status()
- .map(|s| s.success())
- .unwrap_or(false)
+ .status()
+ .map(|s| s.success())
+ .unwrap_or(false)
{
println!("Process failed too");
std::process::exit(1);
@@ -137,7 +143,6 @@ async fn main() {
std::process::exit(1);
}
-
let wait_time = args.interval.unwrap_or(1000);
match args.count {
Some(c) => {
@@ -145,10 +150,10 @@ async fn main() {
main_loop(&args, &mut states, &target, &tx, &mut rx, &mut packet_id);
sleep(tokio::time::Duration::from_millis(wait_time as u64)).await;
}
- },
+ }
None => loop {
main_loop(&args, &mut states, &target, &tx, &mut rx, &mut packet_id);
sleep(tokio::time::Duration::from_millis(wait_time as u64)).await;
- }
+ },
}
}
diff --git a/src/print.rs b/src/print.rs
index 63f730f..f063322 100644
--- a/src/print.rs
+++ b/src/print.rs
@@ -147,7 +147,8 @@ const CHARS_TABLE: [SymbolTableElement; 25] = [
},
];
-const TO_HIDE_LEGENDE_ELEMENTS: [u32; 25] = [
+const TO_HIDE_LEGENDE_ELEMENTS: [u32; 26] = [
+ 0b000_000_000_000_0_000_000_000_000,
0b000_000_000_000_1_000_000_000_000,
0b000_000_001_000_0_000_100_000_000,
0b000_000_100_000_1_000_001_000_000,
@@ -175,6 +176,11 @@ const TO_HIDE_LEGENDE_ELEMENTS: [u32; 25] = [
0b111_111_111_111_1_111_111_111_111, // 25
];
+const LEN_BY_NB_ELEMENT: [u32; 26] = [
+ 139, 133, 128, 122, 117, 111, 105, 100, 94, 88, 83, 78, 72, 66, 60, 55, 50, 44, 38, 32, 27, 21,
+ 16, 10, 4, 0,
+];
+
pub fn print_legende_line() {
let nb_cols: u32 = if let Some((w, _)) = term_size::dimensions() {
w as u32
@@ -182,36 +188,26 @@ pub fn print_legende_line() {
0
};
+ let mut index = 0;
+ while LEN_BY_NB_ELEMENT[index] > nb_cols {
+ index += 1
+ }
+
let size_elem = 6;
let nb_elements_to_print = CHARS_TABLE.len() as u32;
- if nb_cols == 0 || nb_cols >= nb_elements_to_print * size_elem {
- for (index, element) in CHARS_TABLE.iter().enumerate() {
- print!(
- "{} {}{}{}\x1b[0m ",
- 10 * index, element.fg, element.bg, element.character
- );
- }
- println!("{}", ERASE_LINE_END);
- return;
- }
- println!("Nb_cols: {} / Line_size: {}", nb_cols, CHARS_TABLE.len() as u32 * size_elem);
- let nb_elements_to_skip = if (CHARS_TABLE.len() as u32 * size_elem) > nb_cols {
- (CHARS_TABLE.len() as u32 * size_elem - nb_cols + size_elem - 1) / size_elem
- } else {
- 0
- };
- let skip_mod : u32 = nb_elements_to_print / (nb_elements_to_skip as u32 + 1);
- println!("Print: {} / Skip: {} / Mod: {}", nb_elements_to_print, nb_elements_to_skip, skip_mod);
- println!("Print2: {} / Len: {} / Cols: {}", (nb_elements_to_print - nb_elements_to_skip), (nb_elements_to_print - nb_elements_to_skip) * size_elem, nb_cols);
+ let nb_elements_to_skip = index as usize;
for (index, element) in CHARS_TABLE.iter().enumerate() {
- if (TO_HIDE_LEGENDE_ELEMENTS[nb_elements_to_skip as usize]) & (1 << index) != 0 {
+ if (TO_HIDE_LEGENDE_ELEMENTS[nb_elements_to_skip]) & (1 << index) != 0 {
continue;
}
print!(
"{} {}{}{}\x1b[0m ",
- 10 * index, element.fg, element.bg, element.character
+ 10 * index,
+ element.fg,
+ element.bg,
+ element.character
);
}
println!("{}", ERASE_LINE_END);