summaryrefslogtreecommitdiff
path: root/bin/svcconf-convert.pl
diff options
context:
space:
mode:
authornanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-05-08 21:54:10 +0000
committernanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-05-08 21:54:10 +0000
commit0ecf5205b86fec6836445d8df3272cc613b83ea9 (patch)
tree010302338ac8df945f024f8f90d1d9d7cd2b2356 /bin/svcconf-convert.pl
parente7eaa5dec5d01f5094ff207feea5ebb0d224b1c6 (diff)
downloadATCD-0ecf5205b86fec6836445d8df3272cc613b83ea9.tar.gz
ChangeLogTag:Wed May 8 15:15:41 2002 Nanbor Wang <nanbor@cs.wustl.edu>
Diffstat (limited to 'bin/svcconf-convert.pl')
-rwxr-xr-xbin/svcconf-convert.pl300
1 files changed, 300 insertions, 0 deletions
diff --git a/bin/svcconf-convert.pl b/bin/svcconf-convert.pl
new file mode 100755
index 00000000000..978628690fe
--- /dev/null
+++ b/bin/svcconf-convert.pl
@@ -0,0 +1,300 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+#
+# File: svcconf-convert.pl:
+# Purpose: This perl script convert classic svc.conf file into XML svc.conf file format.
+# Usage: svcconf-convert.pl [-i infile] [-o outfile] [-verbose] [-nocomment]
+# -i: Specify the input classic svc.conf filename.
+# If omitted, the default input filename is "svc.conf".
+# -o: Specify the output XML svc.conf filename.
+# If this argument is omitted, the resulting XML file will be written
+# to file called <input filename>.xml.
+# -verbose: Verbose output.
+# -nocomment: Remove all comments. Use this argument if you have comments
+# mixing in the middle of a classic svc.conf directive.
+
+$indent = 0;
+
+sub inc_indent
+{
+ $indent += 2;
+}
+
+sub dec_indent
+{
+ $indent -= 2;
+}
+
+sub get_indent
+{
+ $retv = 0;
+ print STDERR "$0 (", $lineno, "): Unbalanced macro pairs\n" if ($indent < 0);
+ $retv = $indent - 1 if ($indent > 0);
+ $retv;
+}
+
+sub acexml_comment
+{
+ my $comment = shift;
+ print OUT " " x &get_indent (), "<!-- $comment -->\n";
+}
+
+sub acexml_start
+{
+ my $name = shift;
+ my $standalone = shift;
+
+ print OUT " " x &get_indent (), "<$name";
+
+
+ while (@attnames)
+ {
+ print OUT " ", pop (@attnames), '="', pop (@attvalues), '"';
+ }
+
+ if ($standalone != 0)
+ {
+ print OUT "/>\n";
+ }
+ else
+ {
+ print OUT ">\n";
+ inc_indent ();
+ }
+}
+
+sub acexml_end
+{
+ my $name = shift;
+
+ dec_indent ();
+ print OUT " " x &get_indent (), "</$name>\n";
+}
+
+$verbose = 0;
+$nocomment = 0;
+@attvalues = ();
+@attnames = ();
+$stream = "";
+$infile = "";
+$outfile = "";
+
+while ( $#ARGV >= 0)
+{
+ if ($ARGV[0] =~ m/^-i/i) {
+ shift;
+ $infile = "$ARGV[0]";
+ }
+ elsif ($ARGV[0] =~ m/^-o/i) {
+ shift;
+ $outfile = "$ARGV[0]";
+ }
+ elsif ($ARGV[0] =~ m/^-verbose/i) {
+ $verbose = 1;
+ }
+ elsif ($ARGV[0] =~ m/^-nocomment/i) {
+ $nocomment = 1;
+ }
+ elsif ($ARGV[0] =~ m/^-(\?|h|help)/i) { # Help information
+ print
+" Usage: svcconf-convert.pl [-i infile] [-o outfile] [-verbose] [-nocomment]
+ -i: Specify the input classic svc.conf filename.
+ If omitted, the default input filename is 'svc.conf'.
+ -o: Specify the output XML svc.conf filename.
+ If this argument is omitted, the resulting XML file will
+ be written to file called <input filename>.xml.
+ -verbose: Verbose output.
+ -nocomment: Remove all comments. Use this argument if you
+ have comments mixing in the middle of a classic
+ svc.conf directive.
+";
+ exit;
+ }
+ elsif ($ARGV[0] =~ m/^-/) {
+ warn "$0: unknown option $ARGV[0]\n";
+ exit 1;
+ }
+ else {
+ die "unknow argument\n";
+ }
+ shift;
+}
+
+if ($infile eq "") {
+ print "Using default svc.conf name\n" if ($verbose != 0);
+ $infile = "svc.conf";
+}
+
+
+if ($outfile eq "") {
+ $outfile = "$infile.xml";
+}
+print "OUTFILE = $outfile \n";
+
+open (OUT, "> $outfile") or die "Unable to open $outfile\n";
+
+undef $/;
+open (FH, "< $infile");
+$_ = <FH>;
+
+if ($nocomment) {
+ if (s/^\#(.*)$//mg) {
+ print "ts = $_\n" if ($verbose != 0);
+ }
+}
+
+print "------------------------------------------------------------\n" if ($verbose != 0);
+
+print OUT "<?xml version='1.0'?>\n";
+print OUT "<!-- Converted from $infile by svcconf-convert.pl -->\n";
+acexml_start ("ACE_Svc_Conf", 0);
+
+while (length ($_) != 0) {
+ s/^\s*$//mg;
+
+ print "INPUT =\n$_\n" if ($verbose);
+ PARSE: {
+ if (s/^\s*\#(.*)//) {
+ acexml_comment ($1);
+ print "# $1\n" if ($verbose);
+ }
+ if (s/^\s*{//) {
+ acexml_start ("module", 0);
+ print "open module\n" if ($verbose);
+ }
+
+ if (s/^\s*}//) {
+ acexml_end ("module");
+ acexml_end ($stream);
+ print "close module\n" if ($verbose);
+ }
+
+ if (s/^\s*stream\s+dynamic\s+(\w+)\s+(\w+)\s*\*\s*(\S+):(\S+)\s*\(\s*\)(\s+(active|inactive))?(\s+"([^"]+)")?//) {
+ $name = $1;
+ $type = $2;
+ $path = $3;
+ $init = $4;
+ $state = $6;
+ $param = $8;
+ acexml_start ("streamdef");
+ if ($status ne "") {
+ push @attnames, ("status");
+ push @attvalues, ("$state");
+ }
+ push @attnames, ("type");
+ push @attvalues, ("$type");
+ push @attnames, ("id");
+ push @attvalues, ("$name");
+ acexml_start ("dynamic", 0);
+ if ($param ne "") {
+ push @attnames, ("params");
+ push @attvalues, ("$param");
+ }
+ push @attnames, ("init");
+ push @attvalues, ("$init");
+ push @attnames, ("path");
+ push @attvalues, ("$path");
+ acexml_start ("initializer", 1);
+ acexml_end ("dynamic");
+ $stream = "streamdef";
+ print "stream dynamic $name $type * $init:$path \"$param\" $state\n" if ($verbose);
+ }
+
+ if (s/^\s*stream\s+static\s+(\w+)(\s+("(.+)"))?//) {
+ $name = $1;
+ $param = $4;
+ acexml_start ("streamdef", 0);
+ if ($param ne "") {
+ push @attnames, ("params");
+ push @attvalues, ("$param");
+ }
+ push @attnames, ("id");
+ push @attvalues, ("$name");
+ acexml_start ("static", 1);
+ $stream = "streamdef";
+ print "static $name \"$param\"\n" if ($verbose);
+ }
+
+ if (s/^\s*stream\s+(\w+)//) {
+ $name = $1;
+ push @attnames, ("id");
+ push @attvalues, ("$name");
+ acexml_start ("stream", 0);
+ $stream = "stream";
+ print "stream $name\n" if ($verbose);
+ }
+
+ if (s/^\s*dynamic\s+(\w+)\s+(\w+)\s*\*\s*(\S+):(\S+)\s*\(\s*\)(\s+(active|inactive))?(\s+"([^"]+)")?//) {
+ $name = $1;
+ $type = $2;
+ $path = $3;
+ $init = $4;
+ $state = $6;
+ $param = $8;
+ if ($status ne "") {
+ push @attnames, ("status");
+ push @attvalues, ("$state");
+ }
+ push @attnames, ("type");
+ push @attvalues, ("$type");
+ push @attnames, ("id");
+ push @attvalues, ("$name");
+ acexml_start ("dynamic", 0);
+ if ($param ne "") {
+ push @attnames, ("params");
+ push @attvalues, ("$param");
+ }
+ push @attnames, ("init");
+ push @attvalues, ("$init");
+ push @attnames, ("path");
+ push @attvalues, ("$path");
+ acexml_start ("initializer", 1);
+ acexml_end ("dynamic");
+ print "dynamic $name $type * $init:$path \"$param\" $state\n" if ($verbose);
+ }
+
+ if (s/^\s*static\s+(\w+)(\s+("(.+)"))?//) {
+ $name = $1;
+ $param = $4;
+ if ($param ne "") {
+ push @attnames, ("params");
+ push @attvalues, ("$param");
+ }
+ push @attnames, ("id");
+ push @attvalues, ("$name");
+ acexml_start ("static", 1);
+ print "static $name \"$param\"\n" if ($verbose);
+ }
+
+ if ( s/^\s*resume\s+(\w+)//) {
+ $name = $1;
+ push @attnames, ("id");
+ push @attvalues, ("$name");
+ acexml_start ("resume", 1);
+ print "resume $name\n" if ($verbose);
+ }
+
+ if ( s/^\s*remove\s+(\w+)//) {
+ $name = $1;
+ push @attnames, ("id");
+ push @attvalues, ("$name");
+ acexml_start ("remove", 1);
+ print "remove $name\n" if ($verbose);
+ }
+
+ if ( s/^\s*suspend\s+(\w+)//) {
+ $name = $1;
+ push @attnames, ("id");
+ push @attvalues, ("$name");
+ acexml_start ("suspend", 1);
+ print "suspend $name\n" if ($verbose);
+ }
+
+ $nothing = 1;
+ }
+}
+
+acexml_end ("ACE_Svc_Conf");