#!/usr/bin/awk -f BEGIN { if (ARGC != 3) { print "Usage gen_vendors pciidsfile vendorheader" > "/dev/stderr" exit 1 } pci_file=ARGV[1] header_file=ARGV[2] while ((getline < header_file) > 0) { if (NF == 3 && $1 == "#define") vendors[$3] = $2 } while ((getline < pci_file) > 0) { if ($0 ~ "^[0-9a-f]+" && ! vendors["0x"$1]) { key="0x"$1 $1="" vendors[key] = toupper(substr($0, 2)) } } guard=header_file gsub(/\./, "_", guard); print "/* This file is semi autogenerated, do not manual edit */" > header_file print "#ifndef _"toupper(guard)"_" > header_file print "#define _"toupper(guard)"_" > header_file print ""> header_file for (i in vendors) { gsub(/[ \.\)\(-\/\+\']/, "_", vendors[i]) gsub(/[",\?&]/, "", vendors[i]) gsub(/__/, "", vendors[i]) if (vendors[i] ~ /^PCI_VENDOR/) { print "#define "vendors[i]" "i > header_file } else { print "#define PCI_VENDOR_"vendors[i]" "i > header_file } } print "#endif" > header_file }