gr_simple/
gr-simple.rs

1use gr::gr;
2use std::{
3    ffi::{CStr, CString},
4    io::{stdin, Read},
5};
6
7struct Ticker {
8    invocations: usize,
9}
10impl Ticker {
11    const fn new() -> Self {
12        Ticker { invocations: 0 }
13    }
14
15    fn callback(&mut self, pos: (f64, f64), _s: &CStr, v: f64) {
16        self.invocations += 1;
17        let s = format!("{v} ({})", self.invocations);
18        let s = CString::new(s).unwrap();
19        gr::text(pos, s);
20    }
21}
22
23fn main() {
24    let x = &[0., 1.];
25    let mut ticker = Ticker::new();
26    gr::polyline(2, x, x).unwrap();
27    gr::axeslbl(
28        (0.1, 0.1),
29        (0.0, 0.0),
30        (Some(5), Some(10)),
31        0.02,
32        Some(|p, s, v| ticker.callback(p, s, v)),
33        gr::NO_LABEL_FUNCTION,
34    )
35    .unwrap();
36    assert_eq!(ticker.invocations, 3);
37    gr::updatews();
38    stdin().bytes().next();
39}