mirror of
https://github.com/gnuton/asuswrt-merlin.ng.git
synced 2025-05-19 16:02:36 +02:00
52 lines
1.1 KiB
Perl
52 lines
1.1 KiB
Perl
#!/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"
|
|
}
|