gr_simple/
gr-simple.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use gr::gr;
use std::{
    ffi::{CStr, CString},
    io::{stdin, Read},
};

struct Ticker {
    invocations: usize,
}
impl Ticker {
    const fn new() -> Self {
        Ticker { invocations: 0 }
    }

    fn callback(&mut self, pos: (f64, f64), _s: &CStr, v: f64) {
        self.invocations += 1;
        let s = format!("{v} ({})", self.invocations);
        let s = CString::new(s).unwrap();
        gr::text(pos, s);
    }
}

fn main() {
    let x = &[0., 1.];
    let mut ticker = Ticker::new();
    gr::polyline(2, x, x).unwrap();
    gr::axeslbl(
        (0.1, 0.1),
        (0.0, 0.0),
        (Some(5), Some(10)),
        0.02,
        Some(|p, s, v| ticker.callback(p, s, v)),
        gr::NO_LABEL_FUNCTION,
    )
    .unwrap();
    assert_eq!(ticker.invocations, 3);
    gr::updatews();
    stdin().bytes().next();
}