#!/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"
}
