diff options
Diffstat (limited to 'src/ao-make-product.5c')
| -rw-r--r-- | src/ao-make-product.5c | 88 | 
1 files changed, 88 insertions, 0 deletions
| diff --git a/src/ao-make-product.5c b/src/ao-make-product.5c new file mode 100644 index 00000000..933032dd --- /dev/null +++ b/src/ao-make-product.5c @@ -0,0 +1,88 @@ +#!/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); +} + +string manufacturer = "altusmetrum.org"; +string product = "TeleMetrum"; +string version = "0.0"; +int serial = 1; +int user_argind = 0; + +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 = &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_string(version, "iVersion"); +} + +main(); | 
