#!/usr/bin/perl
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright (c) 2000 by Sun Microsystems, Inc.
# All rights reserved.
#
sub trim {
my ($line) = @_;
$line =~ s#/\*|\*/##g;
$line =~ s#^\s+|\s+$##g;
return $line;
}
my $filter = 0;
my %prefix;
while ($#ARGV >= 0) {
$prefix{$ARGV[0]} = 0;
shift @ARGV;
$filter = 1;
}
my $base;
my $bnd;
my @text;
my @sets;
while (<STDIN>) {
my $n = m@^#define\s(E\w\w\w)\w+\s+(\d+)(.*)@;
next unless ($n > 0);
next unless ($filter == 0 || defined $prefix{$1});
my $txt = trim($3);
if (length($txt) == 0) {
my $l = <STDIN>;
$txt = trim($l);
}
$base = $2 if (!defined $base);
if (defined $bnd && $2 != $bnd + 1) {
push(@sets, { base => $base, bnd => $bnd });
$base = $2;
}
$bnd = $2;
push(@text, $txt);
}
push(@sets, { base => $base, bnd => $bnd });
printf "#include <sys/sbd_ioctl.h>\n";
my $i = 0;
my $s = 0;
do {
my $set = $sets[$s];
printf "static char *sbd_t%d[] = {\n", $set->{base};
my $n = $set->{bnd} - $set->{base} + 1;
while ($n--) {
printf "\t\"%s\",\n", $text[$i++];
}
printf "};\n";
} while (++$s <= $#sets);
printf "sbd_etab_t sbd_etab[] = {\n";
$s = 0;
do {
my $set = $sets[$s];
printf "\t{ %d, %d, sbd_t%d },\n",
$set->{base}, $set->{bnd}, $set->{base};
} while (++$s <= $#sets);
printf "};\n";
printf "int sbd_etab_len = %d;\n", $s;