5 string timed_read(file f, int timeout) {
6 thread reader = fork func() { try { return fgets(f); } catch Thread::signal(int i) { return ""; } }();
7 thread killer = fork func() { sleep (timeout); Thread::send_signal(reader, 1); }();
8 poly v = Thread::join(reader);
14 void flush_input(file f) {
16 string s = timed_read(f, 100);
22 string[*] settings(file f) {
26 fprintf (f, "c s\nv\n");
29 string l = File::fgets(f);
31 if (String::index(l, "software-version") == 0)
37 string[*] find_setting(string[*] s, string match) {
38 for (int i = 0; i < dim(s); i++)
39 if (String::index(s[i], match) == 0)
40 return String::split(s[i], " ");
41 return (string[*]) {};
46 string[*] s = settings(f);
48 string[*] cal = find_setting(s, "Radio cal:");
49 string[*] freq = find_setting(s, "Frequency:");
50 if (dim(cal) == 0 || dim(freq) == 0)
51 return (int[2]) { 0, 0 };
53 int cal_val = string_to_integer(cal[2]);
54 int freq_val = string_to_integer(freq[1]);
55 return (int[2]) { cal_val, freq_val };
59 string name = argv[1];
60 file f = open(name, "r+");
62 int[*] vals = get_radio(f);
63 printf ("cal %d freq %f\n", vals[0], vals[1] / 1000);