altosui: Fill in time value of last Eeprom record read from file
[fw/altos] / src / sirf-cksum
1 #!/usr/bin/env nickle
2
3 int checksum(int[] msg)
4 {
5         int sum = 0;
6         for (int i = 0; i < dim(msg); i++) {
7                 sum += msg[i];
8                 sum &= 0x7fff;
9         }
10         return sum;
11 }
12
13 void main()
14 {
15         string[...]     input;
16         int[...]        msg;
17
18         setdim(input, 0);
19         while (!File::end(stdin)) {
20                 input[dim(input)] = gets();
21         }
22
23         setdim(msg, 0);
24         for (int i = 0; i < dim(input); i++) {
25                 string[*] words = String::wordsplit(input[i], " ,\t");
26                 for (int j = 0; j < dim(words); j++) {
27                         if (words[j] == "/" + "*")
28                                 break;
29                         if (String::length(words[j]) > 0 &&
30                             Ctype::isdigit(words[j][0])) {
31                                 msg[dim(msg)] = string_to_integer(words[j]);
32                         }
33                  }
34         }
35         printf("\t0xa0, 0xa2, 0x%02x, 0x%02x,\t/* length: %d bytes */\n",
36                dim(msg) >> 8, dim(msg) & 0xff, dim(msg));
37         for (int i = 0; i < dim(input); i++)
38                 printf("%s\n", input[i]);
39         int csum = checksum(msg);
40         printf ("\t0x%02x, 0x%02x, 0xb0, 0xb3,\n",
41                 csum >> 8, csum & 0xff);
42 }
43
44 main();