#!/bin/rc rfork e DB=usbdb HDR=../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< #include #include #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); } } ' $DB cat < 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 <