summaryrefslogtreecommitdiffstats
path: root/maint/gen-zone
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xmaint/gen-zone52
1 files changed, 52 insertions, 0 deletions
diff --git a/maint/gen-zone b/maint/gen-zone
new file mode 100755
index 0000000..b3591f8
--- /dev/null
+++ b/maint/gen-zone
@@ -0,0 +1,52 @@
+#!/usr/bin/perl -w
+# Create a DNS zone with PCI ID records
+
+use strict;
+
+my %ids = ();
+my %comments = ();
+foreach our $file (@ARGV) {
+ my $fn = ($file =~ /\.gz$/) ? "zcat $file |" : ($file =~ /\.bz2$/) ? "bzcat $file |" : $file;
+ open F, $fn or die "Unable to open $file: $!";
+ my @id = ();
+ my $comm = "";
+ sub err($) {
+ print STDERR "Error in $file, line $.: @_\n";
+ exit 1;
+ }
+ while (<F>) {
+ if (/^(#.*)/) {
+ $comm .= $_;
+ next;
+ }
+ chomp;
+ if (my ($indent, $id, $ignored, $name) = /^(\t*)(([0-9a-fA-Z]+ ?)*)(( |\t|$)\s*(.*))$/) {
+ my $depth = length $indent;
+ $depth <= @id or err "Mismatched indentation";
+ @id = (@id[0..$depth-1], $id);
+ my $i = join(":", @id);
+ if ($i ne "") {
+ !exists $ids{$i} or die "ID $i defined twice";
+ $ids{$i} = $name;
+ $comments{$i} = $comm if $comm;
+ }
+ } elsif (!/^$/) {
+ err "Parse error";
+ }
+ $comm = "";
+ }
+ close F;
+}
+
+sub esc($) {
+ my ($x) = @_;
+ $x =~ s/^\s+//;
+ $x =~ s/"/\\"/g;
+ return $x;
+}
+
+foreach my $i (keys %ids) {
+ my $j = join(".", reverse split(/[: ]/, $i));
+ print "$j.pci\tTXT \"i=", esc($ids{$i}), "\"\n";
+ # print "$j.pci\tTXT \"c=", esc($comments{$i}), "\"\n"
+}