#!/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
#!/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<<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);
}
}
' $DB
cat <<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