mkdev 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #!/bin/rc
  2. rfork e
  3. DB=usbdb
  4. HDR=../lib/usb.h
  5. subs=`{ grep '^ Cl.*' $HDR |
  6. sed -e 's/.*Cl([a-z]+)[ ]+=[ ]+([0-9]+).*/-e s.\1,.\2,./' |
  7. tr A-Z a-z
  8. }
  9. cat<<EOF
  10. /* machine generated. do not edit */
  11. #include <u.h>
  12. #include <libc.h>
  13. #include <thread.h>
  14. #include "usb.h"
  15. #include "usbd.h"
  16. EOF
  17. awk '
  18. collect && /^[^ \t]/{
  19. collect = 0;
  20. }
  21. $0 ~ /^(embed|auto)/{
  22. section = $0;
  23. collect = 1;
  24. next;
  25. }
  26. collect {
  27. if(section ~ "embed"){
  28. printf("extern int %smain(Dev*, int, char**);\n", $1);
  29. }
  30. }
  31. ' $DB
  32. cat <<EOF
  33. Devtab devtab[] = {
  34. /* device, entrypoint, {csp, csp, csp csp}, vid, did */
  35. EOF
  36. awk '
  37. /^#|^$/ { next }
  38. collect && /^[^ \t]/{
  39. collect = 0;
  40. }
  41. $0 ~ /^(embed|auto)/{
  42. section = $0;
  43. collect = 1;
  44. next;
  45. }
  46. collect {
  47. printf(" {\"%s\"", $1);
  48. if(section ~ "embed"){
  49. fns[nfns++] = $1;
  50. printf(",\t%smain", $1);
  51. } else
  52. printf(", nil");
  53. printf(",\t{");
  54. ncsp = 0;
  55. vid="-1";
  56. did="-1";
  57. args="";
  58. for(i = 2; i <= NF; i++)
  59. if($i ~ "^args="){
  60. sub("args=", "", $i);
  61. for(j = i; j <= NF; j++)
  62. if(j > i)
  63. args = args " " $j;
  64. else
  65. args = $j
  66. }
  67. for(i = 2; i <= NF; i++){
  68. if($i ~ "^csp="){
  69. ncsp++;
  70. sub("csp=", "", $i);
  71. printf("%s, ", $i);
  72. } else
  73. if($i ~ "^subclass="){
  74. ncsp++;
  75. sub("subclass=", "", $i);
  76. printf("DSC|%s, ", $i);
  77. } else
  78. if($i ~ "^class="){
  79. ncsp++;
  80. sub("class=", "", $i);
  81. printf("DCL|%s, ", $i);
  82. } else
  83. if($i ~ "^proto="){
  84. ncsp++;
  85. sub("proto=", "", $i);
  86. printf("DPT|%s, ", $i);
  87. } else
  88. if($i ~ "^vid="){
  89. sub("vid=", "", $i);
  90. vid=$i
  91. } else
  92. if($i ~ "did="){
  93. sub("did=", "", $i);
  94. did=$i
  95. }
  96. }
  97. for(i = ncsp; i < 4; i++)
  98. printf("0, ");
  99. printf("}, %s, %s, \"%s\"},\n", vid, did, args);
  100. }
  101. ' $DB | sed $subs
  102. cat <<EOF
  103. {nil, nil, {0, 0, 0, 0, }, -1, -1, nil},
  104. };
  105. /* end of machine generated */
  106. EOF