]> mj.ucw.cz Git - pciutils.git/commitdiff
Added a simple utility for generating the DNS zone with ID's.
authorMartin Mares <mj@ucw.cz>
Mon, 11 Feb 2008 14:50:18 +0000 (15:50 +0100)
committerMartin Mares <mj@ucw.cz>
Mon, 11 Feb 2008 14:50:18 +0000 (15:50 +0100)
maint/gen-zone [new file with mode: 0755]

diff --git a/maint/gen-zone b/maint/gen-zone
new file mode 100755 (executable)
index 0000000..57d7982
--- /dev/null
@@ -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\tTXT \"i=", esc($ids{$i}), "\"\n";
+       # print "$j\tTXT \"c=", esc($comments{$i}), "\"\n"
+}