1*c2e0c6b5SAndroid Build Coastguard Worker#!/usr/bin/perl -w 2*c2e0c6b5SAndroid Build Coastguard Worker# Create a DNS zone with PCI ID records 3*c2e0c6b5SAndroid Build Coastguard Worker 4*c2e0c6b5SAndroid Build Coastguard Workeruse strict; 5*c2e0c6b5SAndroid Build Coastguard Worker 6*c2e0c6b5SAndroid Build Coastguard Workermy %ids = (); 7*c2e0c6b5SAndroid Build Coastguard Workermy %comments = (); 8*c2e0c6b5SAndroid Build Coastguard Workerforeach our $file (@ARGV) { 9*c2e0c6b5SAndroid Build Coastguard Worker my $fn = ($file =~ /\.gz$/) ? "zcat $file |" : ($file =~ /\.bz2$/) ? "bzcat $file |" : $file; 10*c2e0c6b5SAndroid Build Coastguard Worker open F, $fn or die "Unable to open $file: $!"; 11*c2e0c6b5SAndroid Build Coastguard Worker my @id = (); 12*c2e0c6b5SAndroid Build Coastguard Worker my $comm = ""; 13*c2e0c6b5SAndroid Build Coastguard Worker sub err($) { 14*c2e0c6b5SAndroid Build Coastguard Worker print STDERR "Error in $file, line $.: @_\n"; 15*c2e0c6b5SAndroid Build Coastguard Worker exit 1; 16*c2e0c6b5SAndroid Build Coastguard Worker } 17*c2e0c6b5SAndroid Build Coastguard Worker while (<F>) { 18*c2e0c6b5SAndroid Build Coastguard Worker if (/^(#.*)/) { 19*c2e0c6b5SAndroid Build Coastguard Worker $comm .= $_; 20*c2e0c6b5SAndroid Build Coastguard Worker next; 21*c2e0c6b5SAndroid Build Coastguard Worker } 22*c2e0c6b5SAndroid Build Coastguard Worker chomp; 23*c2e0c6b5SAndroid Build Coastguard Worker if (my ($indent, $id, $ignored, $name) = /^(\t*)(([0-9a-fA-Z]+ ?)*)(( |\t|$)\s*(.*))$/) { 24*c2e0c6b5SAndroid Build Coastguard Worker my $depth = length $indent; 25*c2e0c6b5SAndroid Build Coastguard Worker $depth <= @id or err "Mismatched indentation"; 26*c2e0c6b5SAndroid Build Coastguard Worker @id = (@id[0..$depth-1], $id); 27*c2e0c6b5SAndroid Build Coastguard Worker my $i = join(":", @id); 28*c2e0c6b5SAndroid Build Coastguard Worker if ($i ne "") { 29*c2e0c6b5SAndroid Build Coastguard Worker !exists $ids{$i} or die "ID $i defined twice"; 30*c2e0c6b5SAndroid Build Coastguard Worker $ids{$i} = $name; 31*c2e0c6b5SAndroid Build Coastguard Worker $comments{$i} = $comm if $comm; 32*c2e0c6b5SAndroid Build Coastguard Worker } 33*c2e0c6b5SAndroid Build Coastguard Worker } elsif (!/^$/) { 34*c2e0c6b5SAndroid Build Coastguard Worker err "Parse error"; 35*c2e0c6b5SAndroid Build Coastguard Worker } 36*c2e0c6b5SAndroid Build Coastguard Worker $comm = ""; 37*c2e0c6b5SAndroid Build Coastguard Worker } 38*c2e0c6b5SAndroid Build Coastguard Worker close F; 39*c2e0c6b5SAndroid Build Coastguard Worker} 40*c2e0c6b5SAndroid Build Coastguard Worker 41*c2e0c6b5SAndroid Build Coastguard Workersub esc($) { 42*c2e0c6b5SAndroid Build Coastguard Worker my ($x) = @_; 43*c2e0c6b5SAndroid Build Coastguard Worker $x =~ s/^\s+//; 44*c2e0c6b5SAndroid Build Coastguard Worker $x =~ s/"/\\"/g; 45*c2e0c6b5SAndroid Build Coastguard Worker return $x; 46*c2e0c6b5SAndroid Build Coastguard Worker} 47*c2e0c6b5SAndroid Build Coastguard Worker 48*c2e0c6b5SAndroid Build Coastguard Workerforeach my $i (keys %ids) { 49*c2e0c6b5SAndroid Build Coastguard Worker my $j = join(".", reverse split(/[: ]/, $i)); 50*c2e0c6b5SAndroid Build Coastguard Worker print "$j.pci\tTXT \"i=", esc($ids{$i}), "\"\n"; 51*c2e0c6b5SAndroid Build Coastguard Worker # print "$j.pci\tTXT \"c=", esc($comments{$i}), "\"\n" 52*c2e0c6b5SAndroid Build Coastguard Worker} 53