6 write_ucs2(string a, string description)
8 int len = String::length(a);
10 printf("/* %s */\n", description);
11 printf("#define AO_%s_LEN 0x%02x\n", description, len * 2 + 2);
12 printf("#define AO_%s_STRING \"%s\"\n", description, a);
13 printf("#define AO_%s_UCS2", description);
14 for (int i = 0; i < len; i++) {
18 if (0x20 <= c && c < 128)
19 printf(" '%c', 0", c);
21 printf(" LE_WORD(0x%04x),", c);
27 write_string(string a, string description)
29 printf ("/* %s */\n", description);
30 printf ("#define AO_%s_STRING \"%s\"\n", description, a);
34 write_int(int a, string description)
36 printf ("/* %s */\n", description);
37 printf ("#define AO_%s_NUMBER %d\n\n", description, a);
40 string manufacturer = "altusmetrum.org";
41 string product = "TeleMetrum";
42 string version = "0.0";
49 .var = { .arg_string = &manufacturer },
51 .name = "manufacturer",
53 .desc = "Manufacturer name." },
55 .var = { .arg_string = &product },
59 .desc = "Product name." },
61 .var = { .arg_int = &serial },
64 .expr_name = "number",
65 .desc = "Serial number." },
67 .var = { .arg_string = &version },
70 .expr_name = "string",
71 .desc = "Program version." },
73 .prog_name = "usb descriptors",
79 string[dim(argv)-1] nargv = {[n] = argv[n+1]};
80 parseargs(&argd, &nargv);
81 write_ucs2(manufacturer, "iManufacturer");
82 write_ucs2(product, "iProduct");
83 write_ucs2(sprintf("%06d", serial), "iSerial");
84 write_int(serial, "iSerial");
85 write_string(version, "iVersion");