diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 21 | ||||
| -rw-r--r-- | src/print.rs | 40 |
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); |