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