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}