xref: /plan9-contrib/sys/src/cmd/usb/usbd/mkdev (revision 717772fd9215a8ee1386b9a55640ff27154e4b55)
1906943f9SDavid du Colombier#!/bin/rc
2906943f9SDavid du Colombierrfork e
3906943f9SDavid du Colombier
4906943f9SDavid du ColombierDB=usbdb
5906943f9SDavid du ColombierHDR=../lib/usb.h
6906943f9SDavid du Colombier
7906943f9SDavid du Colombiersubs=`{	grep '^	Cl.*' $HDR |
8906943f9SDavid du Colombier		sed -e 's/.*Cl([a-z]+)[ 	]+=[ 	]+([0-9]+).*/-e s.\1,.\2,./' |
9906943f9SDavid du Colombier		tr A-Z a-z
10906943f9SDavid du Colombier}
11906943f9SDavid du Colombiercat<<EOF
12906943f9SDavid du Colombier/* machine generated. do not edit */
13906943f9SDavid du Colombier#include <u.h>
14906943f9SDavid du Colombier#include <libc.h>
15906943f9SDavid du Colombier#include <thread.h>
16906943f9SDavid du Colombier#include "usb.h"
17906943f9SDavid du Colombier#include "usbd.h"
18906943f9SDavid du Colombier
19906943f9SDavid du ColombierEOF
20906943f9SDavid du Colombier
21906943f9SDavid du Colombierawk '
22*717772fdSDavid du Colombier/^#|^$/	{ next }
23906943f9SDavid du Colombiercollect && /^[^ \t]/{
24906943f9SDavid du Colombier	collect = 0;
25906943f9SDavid du Colombier}
26906943f9SDavid du Colombier$0 ~ /^(embed|auto)/{
27906943f9SDavid du Colombier	section = $0;
28906943f9SDavid du Colombier	collect = 1;
29906943f9SDavid du Colombier	next;
30906943f9SDavid du Colombier}
31906943f9SDavid du Colombiercollect {
32906943f9SDavid du Colombier	if(section ~ "embed"){
33906943f9SDavid du Colombier		printf("extern int %smain(Dev*, int, char**);\n", $1);
34906943f9SDavid du Colombier	}
35906943f9SDavid du Colombier}
36906943f9SDavid du Colombier' $DB
37906943f9SDavid du Colombiercat <<EOF
38906943f9SDavid du Colombier
39906943f9SDavid du ColombierDevtab devtab[] = {
40906943f9SDavid du Colombier	/* device, entrypoint, {csp, csp, csp csp}, vid, did */
41906943f9SDavid du ColombierEOF
42*717772fdSDavid du Colombier
43906943f9SDavid du Colombierawk '
44ed868a7cSDavid du Colombier/^#|^$/	{ next }
45906943f9SDavid du Colombiercollect && /^[^ \t]/{
46906943f9SDavid du Colombier	collect = 0;
47906943f9SDavid du Colombier}
48906943f9SDavid du Colombier$0 ~ /^(embed|auto)/{
49906943f9SDavid du Colombier	section = $0;
50906943f9SDavid du Colombier	collect = 1;
51906943f9SDavid du Colombier	next;
52906943f9SDavid du Colombier}
53906943f9SDavid du Colombiercollect {
54906943f9SDavid du Colombier	printf("	{\"%s\"", $1);
55906943f9SDavid du Colombier	if(section ~ "embed"){
56906943f9SDavid du Colombier		fns[nfns++] = $1;
57906943f9SDavid du Colombier		printf(",\t%smain", $1);
58906943f9SDavid du Colombier	} else
59906943f9SDavid du Colombier		printf(", nil");
60906943f9SDavid du Colombier	printf(",\t{");
61906943f9SDavid du Colombier	ncsp = 0;
62906943f9SDavid du Colombier	vid="-1";
63906943f9SDavid du Colombier	did="-1";
64906943f9SDavid du Colombier	args="";
65906943f9SDavid du Colombier	for(i = 2; i <= NF; i++)
66906943f9SDavid du Colombier		if($i ~ "^args="){
67906943f9SDavid du Colombier			sub("args=", "", $i);
68906943f9SDavid du Colombier			for(j = i; j <= NF; j++)
69906943f9SDavid du Colombier				if(j > i)
70906943f9SDavid du Colombier					args = args  " " $j;
71906943f9SDavid du Colombier				else
72906943f9SDavid du Colombier					args = $j
73906943f9SDavid du Colombier		}
74906943f9SDavid du Colombier	for(i = 2; i <= NF; i++){
75906943f9SDavid du Colombier		if($i ~ "^csp="){
76906943f9SDavid du Colombier			ncsp++;
77906943f9SDavid du Colombier			sub("csp=", "", $i);
78906943f9SDavid du Colombier			printf("%s, ", $i);
79906943f9SDavid du Colombier		} else
80906943f9SDavid du Colombier		if($i ~ "^subclass="){
81906943f9SDavid du Colombier			ncsp++;
82906943f9SDavid du Colombier			sub("subclass=", "", $i);
83906943f9SDavid du Colombier			printf("DSC|%s, ", $i);
84906943f9SDavid du Colombier		} else
85906943f9SDavid du Colombier		if($i ~ "^class="){
86906943f9SDavid du Colombier			ncsp++;
87906943f9SDavid du Colombier			sub("class=", "", $i);
88906943f9SDavid du Colombier			printf("DCL|%s, ", $i);
89906943f9SDavid du Colombier		} else
90906943f9SDavid du Colombier		if($i ~ "^proto="){
91906943f9SDavid du Colombier			ncsp++;
92906943f9SDavid du Colombier			sub("proto=", "", $i);
93906943f9SDavid du Colombier			printf("DPT|%s, ", $i);
94906943f9SDavid du Colombier		} else
95906943f9SDavid du Colombier		if($i ~ "^vid="){
96906943f9SDavid du Colombier			sub("vid=", "", $i);
97906943f9SDavid du Colombier			vid=$i
98906943f9SDavid du Colombier		} else
99906943f9SDavid du Colombier		if($i ~ "did="){
100906943f9SDavid du Colombier			sub("did=", "", $i);
101906943f9SDavid du Colombier			did=$i
102906943f9SDavid du Colombier		}
103906943f9SDavid du Colombier	}
104906943f9SDavid du Colombier	for(i = ncsp; i < 4; i++)
105906943f9SDavid du Colombier		printf("0, ");
106906943f9SDavid du Colombier	printf("}, %s, %s, \"%s\"},\n", vid, did, args);
107906943f9SDavid du Colombier}
108906943f9SDavid du Colombier' $DB | sed $subs
109906943f9SDavid du Colombier
110906943f9SDavid du Colombiercat <<EOF
111906943f9SDavid du Colombier	{nil, nil,	{0, 0, 0, 0, }, -1, -1, nil},
112906943f9SDavid du Colombier};
113906943f9SDavid du Colombier
114906943f9SDavid du Colombier/* end of machine generated */
115906943f9SDavid du ColombierEOF
116