#!/bin/sh autoimport ParseArgs; void write_ucs2(string a, string description) { int len = String::length(a); printf("/* %s */\n", description); printf("#define AO_%s_LEN 0x%02x\n", description, len * 2 + 2); printf("#define AO_%s_STRING \"%s\"\n", description, a); printf("#define AO_%s_UCS2", description); for (int i = 0; i < len; i++) { int c = a[i]; if (i > 0) printf(","); if (0x20 <= c && c < 128) printf(" '%c', 0", c); else printf(" LE_WORD(0x%04x),", c); } printf("\n\n"); } void write_string(string a, string description) { printf ("/* %s */\n", description); printf ("#define AO_%s_STRING \"%s\"\n", description, a); } void write_int(int a, string description) { printf ("/* %s */\n", description); printf ("#define AO_%s_NUMBER %d\n\n", description, a); } void write_hex(int a, string description) { printf ("/* %s */\n", description); printf ("#define AO_%s_NUMBER 0x%04x\n\n", description, a); } string manufacturer = "altusmetrum.org"; string product = "TeleMetrum"; string version = "0.0"; int serial = 1; int user_argind = 0; int id_product = 0x000a; argdesc argd = { .args = { { .var = { .arg_string = &manufacturer }, .abbr = 'm', .name = "manufacturer", .expr_name = "manf", .desc = "Manufacturer name." }, { .var = { .arg_string = &product }, .abbr = 'p', .name = "product", .expr_name = "prod", .desc = "Product name." }, { .var = { .arg_int = &id_product }, .abbr = 'i', .name = "id_product", .expr_name = "id_p", .desc = "Product ID." }, { .var = { .arg_int = &serial }, .abbr = 's', .name = "serial", .expr_name = "number", .desc = "Serial number." }, { .var = { .arg_string = &version }, .abbr = 'v', .name = "version", .expr_name = "string", .desc = "Program version." }, }, .prog_name = "usb descriptors", }; void main() { string[dim(argv)-1] nargv = {[n] = argv[n+1]}; parseargs(&argd, &nargv); write_ucs2(manufacturer, "iManufacturer"); write_ucs2(product, "iProduct"); write_ucs2(sprintf("%06d", serial), "iSerial"); write_int(serial, "iSerial"); write_hex(id_product, "idProduct"); write_string(version, "iVersion"); } main();