115 lines · 1.8 KB · Text
RawDownload
#!/bin/rcrfork e DB=usbdbHDR=../lib/usb.h subs=`{	grep '^	Cl.*' $HDR | 		sed -e 's/.*Cl([a-z]+)[ 	]+=[ 	]+([0-9]+).*/-e s.\1,.\2,./' |		tr A-Z a-z}cat<<EOF/* machine generated. do not edit */#include <u.h>#include <libc.h>#include <thread.h>#include "usb.h"#include "usbd.h" EOF awk '/^#|^$/	{ next }collect && /^[^ \t]/{	collect = 0;}$0 ~ /^(embed|auto)/{	section = $0;	collect = 1;	next;}collect {	if(section ~ "embed"){		printf("extern int %smain(Dev*, int, char**);\n", $1);	}}' $DBcat <<EOF Devtab devtab[] = {	/* device, entrypoint, {csp, csp, csp csp}, vid, did */EOF awk '/^#|^$/	{ next }collect && /^[^ \t]/{	collect = 0;}$0 ~ /^(embed|auto)/{	section = $0;	collect = 1;	next;}collect {	printf("	{\"%s\"", $1);	if(section ~ "embed"){		fns[nfns++] = $1;		printf(",\t%smain", $1);	} else		printf(", nil");	printf(",\t{");	ncsp = 0;	vid="-1";	did="-1";	args="";	for(i = 2; i <= NF; i++)		if($i ~ "^args="){			sub("args=", "", $i);			for(j = i; j <= NF; j++)				if(j > i)					args = args  " " $j;				else					args = $j		}	for(i = 2; i <= NF; i++){		if($i ~ "^csp="){			ncsp++;			sub("csp=", "", $i);			printf("%s, ", $i);		} else		if($i ~ "^subclass="){			ncsp++;			sub("subclass=", "", $i);			printf("DSC|%s, ", $i);		} else		if($i ~ "^class="){			ncsp++;			sub("class=", "", $i);			printf("DCL|%s, ", $i);		} else		if($i ~ "^proto="){			ncsp++;			sub("proto=", "", $i);			printf("DPT|%s, ", $i);		} else		if($i ~ "^vid="){			sub("vid=", "", $i);			vid=$i		} else		if($i ~ "did="){			sub("did=", "", $i);			did=$i		}	}	for(i = ncsp; i < 4; i++)		printf("0, ");	printf("}, %s, %s, \"%s\"},\n", vid, did, args);}' $DB | sed $subs cat <<EOF	{nil, nil,	{0, 0, 0, 0, }, -1, -1, nil},}; /* end of machine generated */EOF