xref: /pciutils/maint/gen-zone (revision 4d59f9e5)
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