[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH 01/22] remote generator: Replace tabs with spaces and rename file



No functional change included, just a whitespace change.
---
 daemon/Makefile.am                  |   34 +++---
 daemon/qemu_dispatch_args.h         |    2 +-
 daemon/qemu_dispatch_prototypes.h   |    2 +-
 daemon/qemu_dispatch_ret.h          |    2 +-
 daemon/qemu_dispatch_table.h        |    2 +-
 daemon/remote_dispatch_args.h       |    2 +-
 daemon/remote_dispatch_prototypes.h |    2 +-
 daemon/remote_dispatch_ret.h        |    2 +-
 daemon/remote_dispatch_table.h      |    2 +-
 daemon/remote_generate_stubs.pl     |  195 -----------------------------------
 daemon/remote_generator.pl          |  195 +++++++++++++++++++++++++++++++++++
 src/remote/remote_protocol.x        |    2 +-
 12 files changed, 221 insertions(+), 221 deletions(-)
 delete mode 100755 daemon/remote_generate_stubs.pl
 create mode 100755 daemon/remote_generator.pl

diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index af71188..14088bc 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -23,7 +23,7 @@ AVAHI_SOURCES =						\
 
 DISTCLEANFILES =
 EXTRA_DIST =						\
-	remote_generate_stubs.pl			\
+	remote_generator.pl				\
 	libvirtd.conf					\
 	libvirtd.init.in				\
 	libvirtd.upstart				\
@@ -216,29 +216,29 @@ remote.h: \
 REMOTE_PROTOCOL = $(top_srcdir)/src/remote/remote_protocol.x
 QEMU_PROTOCOL = $(top_srcdir)/src/remote/qemu_protocol.x
 
-remote_dispatch_prototypes.h: $(srcdir)/remote_generate_stubs.pl $(REMOTE_PROTOCOL)
-	$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -c -p remote $(REMOTE_PROTOCOL) > $@
+remote_dispatch_prototypes.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL)
+	$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -p remote $(REMOTE_PROTOCOL) > $@
 
-remote_dispatch_table.h: $(srcdir)/remote_generate_stubs.pl $(REMOTE_PROTOCOL)
-	$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -c -t remote $(REMOTE_PROTOCOL) > $@
+remote_dispatch_table.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL)
+	$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -t remote $(REMOTE_PROTOCOL) > $@
 
-remote_dispatch_args.h: $(srcdir)/remote_generate_stubs.pl $(REMOTE_PROTOCOL)
-	$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -c -a remote $(REMOTE_PROTOCOL) > $@
+remote_dispatch_args.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL)
+	$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -a remote $(REMOTE_PROTOCOL) > $@
 
-remote_dispatch_ret.h: $(srcdir)/remote_generate_stubs.pl $(REMOTE_PROTOCOL)
-	$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -c -r remote $(REMOTE_PROTOCOL) > $@
+remote_dispatch_ret.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL)
+	$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -r remote $(REMOTE_PROTOCOL) > $@
 
-qemu_dispatch_prototypes.h: $(srcdir)/remote_generate_stubs.pl $(QEMU_PROTOCOL)
-	$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -p qemu $(QEMU_PROTOCOL) > $@
+qemu_dispatch_prototypes.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL)
+	$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -p qemu $(QEMU_PROTOCOL) > $@
 
-qemu_dispatch_table.h: $(srcdir)/remote_generate_stubs.pl $(QEMU_PROTOCOL)
-	$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -t qemu $(QEMU_PROTOCOL) > $@
+qemu_dispatch_table.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL)
+	$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -t qemu $(QEMU_PROTOCOL) > $@
 
-qemu_dispatch_args.h: $(srcdir)/remote_generate_stubs.pl $(QEMU_PROTOCOL)
-	$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -a qemu $(QEMU_PROTOCOL) > $@
+qemu_dispatch_args.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL)
+	$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -a qemu $(QEMU_PROTOCOL) > $@
 
-qemu_dispatch_ret.h: $(srcdir)/remote_generate_stubs.pl $(QEMU_PROTOCOL)
-	$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -r qemu $(QEMU_PROTOCOL) > $@
+qemu_dispatch_ret.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL)
+	$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -r qemu $(QEMU_PROTOCOL) > $@
 
 LOGROTATE_CONFS = libvirtd.qemu.logrotate libvirtd.lxc.logrotate \
                   libvirtd.uml.logrotate libvirtd.logrotate
diff --git a/daemon/qemu_dispatch_args.h b/daemon/qemu_dispatch_args.h
index e278fa4..81623bc 100644
--- a/daemon/qemu_dispatch_args.h
+++ b/daemon/qemu_dispatch_args.h
@@ -1,4 +1,4 @@
-/* Automatically generated by remote_generate_stubs.pl.
+/* Automatically generated by remote_generator.pl.
  * Do not edit this file.  Any changes you make will be lost.
  */
 
diff --git a/daemon/qemu_dispatch_prototypes.h b/daemon/qemu_dispatch_prototypes.h
index 4ec1ab4..031ae38 100644
--- a/daemon/qemu_dispatch_prototypes.h
+++ b/daemon/qemu_dispatch_prototypes.h
@@ -1,4 +1,4 @@
-/* Automatically generated by remote_generate_stubs.pl.
+/* Automatically generated by remote_generator.pl.
  * Do not edit this file.  Any changes you make will be lost.
  */
 
diff --git a/daemon/qemu_dispatch_ret.h b/daemon/qemu_dispatch_ret.h
index 492dcf9..4dcab6c 100644
--- a/daemon/qemu_dispatch_ret.h
+++ b/daemon/qemu_dispatch_ret.h
@@ -1,4 +1,4 @@
-/* Automatically generated by remote_generate_stubs.pl.
+/* Automatically generated by remote_generator.pl.
  * Do not edit this file.  Any changes you make will be lost.
  */
 
diff --git a/daemon/qemu_dispatch_table.h b/daemon/qemu_dispatch_table.h
index c196a3c..d8eebd0 100644
--- a/daemon/qemu_dispatch_table.h
+++ b/daemon/qemu_dispatch_table.h
@@ -1,4 +1,4 @@
-/* Automatically generated by remote_generate_stubs.pl.
+/* Automatically generated by remote_generator.pl.
  * Do not edit this file.  Any changes you make will be lost.
  */
 
diff --git a/daemon/remote_dispatch_args.h b/daemon/remote_dispatch_args.h
index f9537d7..31c02c7 100644
--- a/daemon/remote_dispatch_args.h
+++ b/daemon/remote_dispatch_args.h
@@ -1,4 +1,4 @@
-/* Automatically generated by remote_generate_stubs.pl.
+/* Automatically generated by remote_generator.pl.
  * Do not edit this file.  Any changes you make will be lost.
  */
 
diff --git a/daemon/remote_dispatch_prototypes.h b/daemon/remote_dispatch_prototypes.h
index cf2f38c..a029b85 100644
--- a/daemon/remote_dispatch_prototypes.h
+++ b/daemon/remote_dispatch_prototypes.h
@@ -1,4 +1,4 @@
-/* Automatically generated by remote_generate_stubs.pl.
+/* Automatically generated by remote_generator.pl.
  * Do not edit this file.  Any changes you make will be lost.
  */
 
diff --git a/daemon/remote_dispatch_ret.h b/daemon/remote_dispatch_ret.h
index 114e832..cf63657 100644
--- a/daemon/remote_dispatch_ret.h
+++ b/daemon/remote_dispatch_ret.h
@@ -1,4 +1,4 @@
-/* Automatically generated by remote_generate_stubs.pl.
+/* Automatically generated by remote_generator.pl.
  * Do not edit this file.  Any changes you make will be lost.
  */
 
diff --git a/daemon/remote_dispatch_table.h b/daemon/remote_dispatch_table.h
index b39f7c2..d2ce08c 100644
--- a/daemon/remote_dispatch_table.h
+++ b/daemon/remote_dispatch_table.h
@@ -1,4 +1,4 @@
-/* Automatically generated by remote_generate_stubs.pl.
+/* Automatically generated by remote_generator.pl.
  * Do not edit this file.  Any changes you make will be lost.
  */
 
diff --git a/daemon/remote_generate_stubs.pl b/daemon/remote_generate_stubs.pl
deleted file mode 100755
index dbde7da..0000000
--- a/daemon/remote_generate_stubs.pl
+++ /dev/null
@@ -1,195 +0,0 @@
-#!/usr/bin/perl -w
-#
-# This script parses remote_protocol.x or qemu_protocol.x and produces lots of
-# boilerplate code for both ends of the remote connection.
-#
-# The first non-option argument specifies the prefix to be searched for, and
-# output to, the boilerplate code.  The second non-option argument is the
-# file you want to operate on.  For instance, to generate the dispatch table
-# for both remote_protocol.x and qemu_protocol.x, you would run the
-# following:
-#
-# remote_generate_stubs.pl -c -t remote ../src/remote/remote_protocol.x
-# remote_generate_stubs.pl -t qemu ../src/remote/qemu_protocol.x
-#
-# By Richard Jones <rjones redhat com>
-
-use strict;
-
-use Getopt::Std;
-
-# Command line options.
-our ($opt_p, $opt_t, $opt_a, $opt_r, $opt_d, $opt_c);
-getopts ('ptardc');
-
-my $structprefix = $ARGV[0];
-my $procprefix = uc $structprefix;
-shift;
-
-# Convert name_of_call to NameOfCall.
-sub name_to_ProcName {
-    my $name = shift;
-    my @elems = split /_/, $name;
-    @elems = map ucfirst, @elems;
-    join "", @elems
-}
-
-# Read the input file (usually remote_protocol.x) and form an
-# opinion about the name, args and return type of each RPC.
-my ($name, $ProcName, $id, %calls, @calls);
-
-# only generate a close method if -c was passed
-if ($opt_c) {
-    # REMOTE_PROC_CLOSE has no args or ret.
-    $calls{close} = {
-	name => "close",
-	ProcName => "Close",
-	UC_NAME => "CLOSE",
-	args => "void",
-	ret => "void",
-    };
-}
-
-while (<>) {
-    if (/^struct ${structprefix}_(.*)_args/) {
-	$name = $1;
-	$ProcName = name_to_ProcName ($name);
-
-	die "duplicate definition of ${structprefix}_${name}_args"
-	    if exists $calls{$name};
-
-	$calls{$name} = {
-	    name => $name,
-	    ProcName => $ProcName,
-	    UC_NAME => uc $name,
-	    args => "${structprefix}_${name}_args",
-	    ret => "void",
-	};
-
-    } elsif (/^struct ${structprefix}_(.*)_ret/) {
-	$name = $1;
-	$ProcName = name_to_ProcName ($name);
-
-	if (exists $calls{$name}) {
-	    $calls{$name}->{ret} = "${structprefix}_${name}_ret";
-	} else {
-	    $calls{$name} = {
-		name => $name,
-		ProcName => $ProcName,
-		UC_NAME => uc $name,
-		args => "void",
-		ret => "${structprefix}_${name}_ret"
-	    }
-	}
-    } elsif (/^struct ${structprefix}_(.*)_msg/) {
-	$name = $1;
-	$ProcName = name_to_ProcName ($name);
-
-	$calls{$name} = {
-	    name => $name,
-	    ProcName => $ProcName,
-	    UC_NAME => uc $name,
-	    msg => "${structprefix}_${name}_msg"
-	}
-    } elsif (/^\s*${procprefix}_PROC_(.*?)\s+=\s+(\d+),?$/) {
-	$name = lc $1;
-	$id = $2;
-	$ProcName = name_to_ProcName ($name);
-
-	$calls[$id] = $calls{$name};
-    }
-}
-
-#----------------------------------------------------------------------
-# Output
-
-print <<__EOF__;
-/* Automatically generated by remote_generate_stubs.pl.
- * Do not edit this file.  Any changes you make will be lost.
- */
-
-__EOF__
-
-# Debugging.
-if ($opt_d) {
-    my @keys = sort (keys %calls);
-    foreach (@keys) {
-	print "$_:\n";
-	print "        name $calls{$_}->{name} ($calls{$_}->{ProcName})\n";
-	print "        $calls{$_}->{args} -> $calls{$_}->{ret}\n";
-    }
-}
-
-# Prototypes for dispatch functions ("remote_dispatch_prototypes.h").
-elsif ($opt_p) {
-    my @keys = sort (keys %calls);
-    foreach (@keys) {
-	# Skip things which are REMOTE_MESSAGE
-	next if $calls{$_}->{msg};
-
-	print "static int ${structprefix}Dispatch$calls{$_}->{ProcName}(\n";
-	print "    struct qemud_server *server,\n";
-	print "    struct qemud_client *client,\n";
-	print "    virConnectPtr conn,\n";
-	print "    remote_message_header *hdr,\n";
-	print "    remote_error *rerr,\n";
-	print "    $calls{$_}->{args} *args,\n";
-	print "    $calls{$_}->{ret} *ret);\n";
-    }
-}
-
-# Union of all arg types
-# ("remote_dispatch_args.h").
-elsif ($opt_a) {
-    for ($id = 0 ; $id <= $#calls ; $id++) {
-	if (defined $calls[$id] &&
-	    !$calls[$id]->{msg} &&
-	    $calls[$id]->{args} ne "void") {
-	    print "    $calls[$id]->{args} val_$calls[$id]->{args};\n";
-	}
-    }
-}
-
-# Union of all arg types
-# ("remote_dispatch_ret.h").
-elsif ($opt_r) {
-    for ($id = 0 ; $id <= $#calls ; $id++) {
-	if (defined $calls[$id] &&
-	    !$calls[$id]->{msg} &&
-	    $calls[$id]->{ret} ne "void") {
-	    print "    $calls[$id]->{ret} val_$calls[$id]->{ret};\n";
-	}
-    }
-}
-
-# Inside the switch statement, prepare the 'fn', 'args_filter', etc
-# ("remote_dispatch_table.h").
-elsif ($opt_t) {
-    for ($id = 0 ; $id <= $#calls ; $id++) {
-	if (defined $calls[$id] && !$calls[$id]->{msg}) {
-	    print "{   /* $calls[$id]->{ProcName} => $id */\n";
-	    print "    .fn = (dispatch_fn) ${structprefix}Dispatch$calls[$id]->{ProcName},\n";
-	    if ($calls[$id]->{args} ne "void") {
-		print "    .args_filter = (xdrproc_t) xdr_$calls[$id]->{args},\n";
-	    } else {
-		print "    .args_filter = (xdrproc_t) xdr_void,\n";
-	    }
-	    if ($calls[$id]->{ret} ne "void") {
-		print "    .ret_filter = (xdrproc_t) xdr_$calls[$id]->{ret},\n";
-	    } else {
-		print "    .ret_filter = (xdrproc_t) xdr_void,\n";
-	    }
-	    print "},\n";
-	} else {
-	    if ($calls[$id]->{msg}) {
-		print "{   /* Async event $calls[$id]->{ProcName} => $id */\n";
-	    } else {
-		print "{   /* (unused) => $id */\n";
-	    }
-	    print "    .fn = NULL,\n";
-	    print "    .args_filter = (xdrproc_t) xdr_void,\n";
-	    print "    .ret_filter = (xdrproc_t) xdr_void,\n";
-	    print "},\n";
-	}
-    }
-}
diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl
new file mode 100755
index 0000000..e4cade6
--- /dev/null
+++ b/daemon/remote_generator.pl
@@ -0,0 +1,195 @@
+#!/usr/bin/perl -w
+#
+# This script parses remote_protocol.x or qemu_protocol.x and produces lots of
+# boilerplate code for both ends of the remote connection.
+#
+# The first non-option argument specifies the prefix to be searched for, and
+# output to, the boilerplate code.  The second non-option argument is the
+# file you want to operate on.  For instance, to generate the dispatch table
+# for both remote_protocol.x and qemu_protocol.x, you would run the
+# following:
+#
+# remote_generator.pl -c -t remote ../src/remote/remote_protocol.x
+# remote_generator.pl -t qemu ../src/remote/qemu_protocol.x
+#
+# By Richard Jones <rjones redhat com>
+
+use strict;
+
+use Getopt::Std;
+
+# Command line options.
+our ($opt_p, $opt_t, $opt_a, $opt_r, $opt_d, $opt_c);
+getopts ('ptardc');
+
+my $structprefix = $ARGV[0];
+my $procprefix = uc $structprefix;
+shift;
+
+# Convert name_of_call to NameOfCall.
+sub name_to_ProcName {
+    my $name = shift;
+    my @elems = split /_/, $name;
+    @elems = map ucfirst, @elems;
+    join "", @elems
+}
+
+# Read the input file (usually remote_protocol.x) and form an
+# opinion about the name, args and return type of each RPC.
+my ($name, $ProcName, $id, %calls, @calls);
+
+# only generate a close method if -c was passed
+if ($opt_c) {
+    # REMOTE_PROC_CLOSE has no args or ret.
+    $calls{close} = {
+        name => "close",
+        ProcName => "Close",
+        UC_NAME => "CLOSE",
+        args => "void",
+        ret => "void",
+    };
+}
+
+while (<>) {
+    if (/^struct ${structprefix}_(.*)_args/) {
+        $name = $1;
+        $ProcName = name_to_ProcName ($name);
+
+        die "duplicate definition of ${structprefix}_${name}_args"
+            if exists $calls{$name};
+
+        $calls{$name} = {
+            name => $name,
+            ProcName => $ProcName,
+            UC_NAME => uc $name,
+            args => "${structprefix}_${name}_args",
+            ret => "void",
+        };
+
+    } elsif (/^struct ${structprefix}_(.*)_ret/) {
+        $name = $1;
+        $ProcName = name_to_ProcName ($name);
+
+        if (exists $calls{$name}) {
+            $calls{$name}->{ret} = "${structprefix}_${name}_ret";
+        } else {
+            $calls{$name} = {
+                name => $name,
+                ProcName => $ProcName,
+                UC_NAME => uc $name,
+                args => "void",
+                ret => "${structprefix}_${name}_ret"
+            }
+        }
+    } elsif (/^struct ${structprefix}_(.*)_msg/) {
+        $name = $1;
+        $ProcName = name_to_ProcName ($name);
+
+        $calls{$name} = {
+            name => $name,
+            ProcName => $ProcName,
+            UC_NAME => uc $name,
+            msg => "${structprefix}_${name}_msg"
+        }
+    } elsif (/^\s*${procprefix}_PROC_(.*?)\s+=\s+(\d+),?$/) {
+        $name = lc $1;
+        $id = $2;
+        $ProcName = name_to_ProcName ($name);
+
+        $calls[$id] = $calls{$name};
+    }
+}
+
+#----------------------------------------------------------------------
+# Output
+
+print <<__EOF__;
+/* Automatically generated by remote_generator.pl.
+ * Do not edit this file.  Any changes you make will be lost.
+ */
+
+__EOF__
+
+# Debugging.
+if ($opt_d) {
+    my @keys = sort (keys %calls);
+    foreach (@keys) {
+        print "$_:\n";
+        print "        name $calls{$_}->{name} ($calls{$_}->{ProcName})\n";
+        print "        $calls{$_}->{args} -> $calls{$_}->{ret}\n";
+    }
+}
+
+# Prototypes for dispatch functions ("remote_dispatch_prototypes.h").
+elsif ($opt_p) {
+    my @keys = sort (keys %calls);
+    foreach (@keys) {
+        # Skip things which are REMOTE_MESSAGE
+        next if $calls{$_}->{msg};
+
+        print "static int ${structprefix}Dispatch$calls{$_}->{ProcName}(\n";
+        print "    struct qemud_server *server,\n";
+        print "    struct qemud_client *client,\n";
+        print "    virConnectPtr conn,\n";
+        print "    remote_message_header *hdr,\n";
+        print "    remote_error *rerr,\n";
+        print "    $calls{$_}->{args} *args,\n";
+        print "    $calls{$_}->{ret} *ret);\n";
+    }
+}
+
+# Union of all arg types
+# ("remote_dispatch_args.h").
+elsif ($opt_a) {
+    for ($id = 0 ; $id <= $#calls ; $id++) {
+        if (defined $calls[$id] &&
+            !$calls[$id]->{msg} &&
+            $calls[$id]->{args} ne "void") {
+            print "    $calls[$id]->{args} val_$calls[$id]->{args};\n";
+        }
+    }
+}
+
+# Union of all arg types
+# ("remote_dispatch_ret.h").
+elsif ($opt_r) {
+    for ($id = 0 ; $id <= $#calls ; $id++) {
+        if (defined $calls[$id] &&
+            !$calls[$id]->{msg} &&
+            $calls[$id]->{ret} ne "void") {
+            print "    $calls[$id]->{ret} val_$calls[$id]->{ret};\n";
+        }
+    }
+}
+
+# Inside the switch statement, prepare the 'fn', 'args_filter', etc
+# ("remote_dispatch_table.h").
+elsif ($opt_t) {
+    for ($id = 0 ; $id <= $#calls ; $id++) {
+        if (defined $calls[$id] && !$calls[$id]->{msg}) {
+            print "{   /* $calls[$id]->{ProcName} => $id */\n";
+            print "    .fn = (dispatch_fn) ${structprefix}Dispatch$calls[$id]->{ProcName},\n";
+            if ($calls[$id]->{args} ne "void") {
+                print "    .args_filter = (xdrproc_t) xdr_$calls[$id]->{args},\n";
+            } else {
+                print "    .args_filter = (xdrproc_t) xdr_void,\n";
+            }
+            if ($calls[$id]->{ret} ne "void") {
+                print "    .ret_filter = (xdrproc_t) xdr_$calls[$id]->{ret},\n";
+            } else {
+                print "    .ret_filter = (xdrproc_t) xdr_void,\n";
+            }
+            print "},\n";
+        } else {
+            if ($calls[$id]->{msg}) {
+                print "{   /* Async event $calls[$id]->{ProcName} => $id */\n";
+            } else {
+                print "{   /* (unused) => $id */\n";
+            }
+            print "    .fn = NULL,\n";
+            print "    .args_filter = (xdrproc_t) xdr_void,\n";
+            print "    .ret_filter = (xdrproc_t) xdr_void,\n";
+            print "},\n";
+        }
+    }
+}
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
index 675eccd..b9f1bc7 100644
--- a/src/remote/remote_protocol.x
+++ b/src/remote/remote_protocol.x
@@ -367,7 +367,7 @@ struct remote_memory_param {
  * connection).  Errors are returned implicitly in the RPC protocol.
  *
  * Please follow the naming convention carefully - this file is
- * parsed by 'remote_generate_stubs.pl'.
+ * parsed by 'remote_generator.pl'.
  */
 
 struct remote_open_args {
-- 
1.7.0.4


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]