Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r58626 - in trunk/libs/asio/test: . ip local posix windows
From: chris_at_[hidden]
Date: 2010-01-02 02:18:12


Author: chris_kohlhoff
Date: 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
New Revision: 58626
URL: http://svn.boost.org/trac/boost/changeset/58626

Log:
Include specific headers in unit tests rather than the convenience header asio.hpp.

Text files modified:
   trunk/libs/asio/test/buffered_read_stream.cpp | 5 ++++-
   trunk/libs/asio/test/buffered_stream.cpp | 5 ++++-
   trunk/libs/asio/test/buffered_write_stream.cpp | 5 ++++-
   trunk/libs/asio/test/buffers_iterator.cpp | 2 +-
   trunk/libs/asio/test/deadline_timer.cpp | 3 ++-
   trunk/libs/asio/test/io_service.cpp | 4 ++--
   trunk/libs/asio/test/ip/host_name.cpp | 1 -
   trunk/libs/asio/test/ip/multicast.cpp | 3 ++-
   trunk/libs/asio/test/ip/tcp.cpp | 2 +-
   trunk/libs/asio/test/ip/udp.cpp | 3 ++-
   trunk/libs/asio/test/ip/unicast.cpp | 3 ++-
   trunk/libs/asio/test/ip/v6_only.cpp | 4 +++-
   trunk/libs/asio/test/is_read_buffered.cpp | 5 ++++-
   trunk/libs/asio/test/is_write_buffered.cpp | 5 ++++-
   trunk/libs/asio/test/local/connect_pair.cpp | 4 +++-
   trunk/libs/asio/test/local/datagram_protocol.cpp | 2 +-
   trunk/libs/asio/test/local/stream_protocol.cpp | 2 +-
   trunk/libs/asio/test/posix/basic_descriptor.cpp | 1 -
   trunk/libs/asio/test/posix/basic_stream_descriptor.cpp | 1 -
   trunk/libs/asio/test/posix/descriptor_base.cpp | 1 -
   trunk/libs/asio/test/posix/stream_descriptor.cpp | 2 +-
   trunk/libs/asio/test/posix/stream_descriptor_service.cpp | 1 -
   trunk/libs/asio/test/read.cpp | 3 ++-
   trunk/libs/asio/test/read_at.cpp | 3 ++-
   trunk/libs/asio/test/read_until.cpp | 4 +++-
   trunk/libs/asio/test/serial_port.cpp | 2 +-
   trunk/libs/asio/test/serial_port_base.cpp | 3 ++-
   trunk/libs/asio/test/socket_base.cpp | 4 +++-
   trunk/libs/asio/test/strand.cpp | 5 +++--
   trunk/libs/asio/test/windows/overlapped_ptr.cpp | 2 +-
   trunk/libs/asio/test/windows/random_access_handle.cpp | 2 +-
   trunk/libs/asio/test/windows/stream_handle.cpp | 2 +-
   trunk/libs/asio/test/write.cpp | 3 ++-
   trunk/libs/asio/test/write_at.cpp | 3 ++-
   34 files changed, 64 insertions(+), 36 deletions(-)

Modified: trunk/libs/asio/test/buffered_read_stream.cpp
==============================================================================
--- trunk/libs/asio/test/buffered_read_stream.cpp (original)
+++ trunk/libs/asio/test/buffered_read_stream.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -18,7 +18,10 @@
 
 #include <boost/bind.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/placeholders.hpp>
 #include "unit_test.hpp"
 
 typedef boost::asio::buffered_read_stream<

Modified: trunk/libs/asio/test/buffered_stream.cpp
==============================================================================
--- trunk/libs/asio/test/buffered_stream.cpp (original)
+++ trunk/libs/asio/test/buffered_stream.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -18,7 +18,10 @@
 
 #include <boost/bind.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/placeholders.hpp>
 #include "unit_test.hpp"
 
 typedef boost::asio::buffered_stream<

Modified: trunk/libs/asio/test/buffered_write_stream.cpp
==============================================================================
--- trunk/libs/asio/test/buffered_write_stream.cpp (original)
+++ trunk/libs/asio/test/buffered_write_stream.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -18,7 +18,10 @@
 
 #include <boost/bind.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/placeholders.hpp>
 #include "unit_test.hpp"
 
 typedef boost::asio::buffered_write_stream<

Modified: trunk/libs/asio/test/buffers_iterator.cpp
==============================================================================
--- trunk/libs/asio/test/buffers_iterator.cpp (original)
+++ trunk/libs/asio/test/buffers_iterator.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,7 @@
 // Test that header file is self-contained.
 #include <boost/asio/buffers_iterator.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/buffer.hpp>
 #include "unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/deadline_timer.cpp
==============================================================================
--- trunk/libs/asio/test/deadline_timer.cpp (original)
+++ trunk/libs/asio/test/deadline_timer.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -17,7 +17,8 @@
 #include <boost/asio/deadline_timer.hpp>
 
 #include <boost/bind.hpp>
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/placeholders.hpp>
 #include "unit_test.hpp"
 
 using namespace boost::posix_time;

Modified: trunk/libs/asio/test/io_service.cpp
==============================================================================
--- trunk/libs/asio/test/io_service.cpp (original)
+++ trunk/libs/asio/test/io_service.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -17,9 +17,9 @@
 #include <boost/asio/io_service.hpp>
 
 #include <sstream>
-#include <boost/bind.hpp>
-#include <boost/asio.hpp>
 #include <boost/thread.hpp>
+#include <boost/bind.hpp>
+#include <boost/asio/deadline_timer.hpp>
 #include "unit_test.hpp"
 
 using namespace boost::asio;

Modified: trunk/libs/asio/test/ip/host_name.cpp
==============================================================================
--- trunk/libs/asio/test/ip/host_name.cpp (original)
+++ trunk/libs/asio/test/ip/host_name.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,6 @@
 // Test that header file is self-contained.
 #include <boost/asio/ip/host_name.hpp>
 
-#include <boost/asio.hpp>
 #include "../unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/ip/multicast.cpp
==============================================================================
--- trunk/libs/asio/test/ip/multicast.cpp (original)
+++ trunk/libs/asio/test/ip/multicast.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,8 @@
 // Test that header file is self-contained.
 #include <boost/asio/ip/multicast.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/udp.hpp>
 #include "../unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/ip/tcp.cpp
==============================================================================
--- trunk/libs/asio/test/ip/tcp.cpp (original)
+++ trunk/libs/asio/test/ip/tcp.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -18,7 +18,7 @@
 
 #include <boost/bind.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
 #include "../unit_test.hpp"
 #include "../archetypes/io_control_command.hpp"
 

Modified: trunk/libs/asio/test/ip/udp.cpp
==============================================================================
--- trunk/libs/asio/test/ip/udp.cpp (original)
+++ trunk/libs/asio/test/ip/udp.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -18,7 +18,8 @@
 
 #include <boost/bind.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/placeholders.hpp>
 #include "../unit_test.hpp"
 #include "../archetypes/io_control_command.hpp"
 

Modified: trunk/libs/asio/test/ip/unicast.cpp
==============================================================================
--- trunk/libs/asio/test/ip/unicast.cpp (original)
+++ trunk/libs/asio/test/ip/unicast.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,8 @@
 // Test that header file is self-contained.
 #include <boost/asio/ip/unicast.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/udp.hpp>
 #include "../unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/ip/v6_only.cpp
==============================================================================
--- trunk/libs/asio/test/ip/v6_only.cpp (original)
+++ trunk/libs/asio/test/ip/v6_only.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,9 @@
 // Test that header file is self-contained.
 #include <boost/asio/ip/v6_only.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/ip/udp.hpp>
 #include "../unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/is_read_buffered.cpp
==============================================================================
--- trunk/libs/asio/test/is_read_buffered.cpp (original)
+++ trunk/libs/asio/test/is_read_buffered.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -18,7 +18,10 @@
 
 #include <boost/bind.hpp>
 #include <boost/noncopyable.hpp>
-#include <boost/asio.hpp>
+#include <boost/asio/buffered_read_stream.hpp>
+#include <boost/asio/buffered_write_stream.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/tcp.hpp>
 #include "unit_test.hpp"
 
 using namespace std; // For memcmp, memcpy and memset.

Modified: trunk/libs/asio/test/is_write_buffered.cpp
==============================================================================
--- trunk/libs/asio/test/is_write_buffered.cpp (original)
+++ trunk/libs/asio/test/is_write_buffered.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -18,7 +18,10 @@
 
 #include <boost/bind.hpp>
 #include <boost/noncopyable.hpp>
-#include <boost/asio.hpp>
+#include <boost/asio/buffered_read_stream.hpp>
+#include <boost/asio/buffered_write_stream.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/tcp.hpp>
 #include "unit_test.hpp"
 
 using namespace std; // For memcmp, memcpy and memset.

Modified: trunk/libs/asio/test/local/connect_pair.cpp
==============================================================================
--- trunk/libs/asio/test/local/connect_pair.cpp (original)
+++ trunk/libs/asio/test/local/connect_pair.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,9 @@
 // Test that header file is self-contained.
 #include <boost/asio/local/connect_pair.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/local/datagram_protocol.hpp>
+#include <boost/asio/local/stream_protocol.hpp>
 #include "../unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/local/datagram_protocol.cpp
==============================================================================
--- trunk/libs/asio/test/local/datagram_protocol.cpp (original)
+++ trunk/libs/asio/test/local/datagram_protocol.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -18,7 +18,7 @@
 
 #include <boost/bind.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
 #include "../unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/local/stream_protocol.cpp
==============================================================================
--- trunk/libs/asio/test/local/stream_protocol.cpp (original)
+++ trunk/libs/asio/test/local/stream_protocol.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -18,7 +18,7 @@
 
 #include <boost/bind.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
 #include "../unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/posix/basic_descriptor.cpp
==============================================================================
--- trunk/libs/asio/test/posix/basic_descriptor.cpp (original)
+++ trunk/libs/asio/test/posix/basic_descriptor.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,6 @@
 // Test that header file is self-contained.
 #include <boost/asio/posix/basic_descriptor.hpp>
 
-#include <boost/asio.hpp>
 #include "../unit_test.hpp"
 
 test_suite* init_unit_test_suite(int, char*[])

Modified: trunk/libs/asio/test/posix/basic_stream_descriptor.cpp
==============================================================================
--- trunk/libs/asio/test/posix/basic_stream_descriptor.cpp (original)
+++ trunk/libs/asio/test/posix/basic_stream_descriptor.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,6 @@
 // Test that header file is self-contained.
 #include <boost/asio/posix/basic_stream_descriptor.hpp>
 
-#include <boost/asio.hpp>
 #include "../unit_test.hpp"
 
 test_suite* init_unit_test_suite(int, char*[])

Modified: trunk/libs/asio/test/posix/descriptor_base.cpp
==============================================================================
--- trunk/libs/asio/test/posix/descriptor_base.cpp (original)
+++ trunk/libs/asio/test/posix/descriptor_base.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,6 @@
 // Test that header file is self-contained.
 #include <boost/asio/posix/descriptor_base.hpp>
 
-#include <boost/asio.hpp>
 #include "../unit_test.hpp"
 
 test_suite* init_unit_test_suite(int, char*[])

Modified: trunk/libs/asio/test/posix/stream_descriptor.cpp
==============================================================================
--- trunk/libs/asio/test/posix/stream_descriptor.cpp (original)
+++ trunk/libs/asio/test/posix/stream_descriptor.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,7 @@
 // Test that header file is self-contained.
 #include <boost/asio/posix/stream_descriptor.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
 #include "../unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/posix/stream_descriptor_service.cpp
==============================================================================
--- trunk/libs/asio/test/posix/stream_descriptor_service.cpp (original)
+++ trunk/libs/asio/test/posix/stream_descriptor_service.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,6 @@
 // Test that header file is self-contained.
 #include <boost/asio/posix/stream_descriptor_service.hpp>
 
-#include <boost/asio.hpp>
 #include "../unit_test.hpp"
 
 test_suite* init_unit_test_suite(int, char*[])

Modified: trunk/libs/asio/test/read.cpp
==============================================================================
--- trunk/libs/asio/test/read.cpp (original)
+++ trunk/libs/asio/test/read.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -19,7 +19,8 @@
 #include <boost/bind.hpp>
 #include <boost/noncopyable.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/placeholders.hpp>
 #include "unit_test.hpp"
 
 using namespace std; // For memcmp, memcpy and memset.

Modified: trunk/libs/asio/test/read_at.cpp
==============================================================================
--- trunk/libs/asio/test/read_at.cpp (original)
+++ trunk/libs/asio/test/read_at.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -19,7 +19,8 @@
 #include <boost/bind.hpp>
 #include <boost/noncopyable.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/placeholders.hpp>
 #include "unit_test.hpp"
 
 using namespace std; // For memcmp, memcpy and memset.

Modified: trunk/libs/asio/test/read_until.cpp
==============================================================================
--- trunk/libs/asio/test/read_until.cpp (original)
+++ trunk/libs/asio/test/read_until.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -19,7 +19,9 @@
 #include <boost/bind.hpp>
 #include <boost/noncopyable.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/placeholders.hpp>
+#include <boost/asio/streambuf.hpp>
 #include "unit_test.hpp"
 
 class test_stream

Modified: trunk/libs/asio/test/serial_port.cpp
==============================================================================
--- trunk/libs/asio/test/serial_port.cpp (original)
+++ trunk/libs/asio/test/serial_port.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -17,7 +17,7 @@
 // Test that header file is self-contained.
 #include <boost/asio/serial_port.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
 #include "unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/serial_port_base.cpp
==============================================================================
--- trunk/libs/asio/test/serial_port_base.cpp (original)
+++ trunk/libs/asio/test/serial_port_base.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -17,7 +17,8 @@
 // Test that header file is self-contained.
 #include <boost/asio/serial_port_base.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/serial_port.hpp>
 #include "unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/socket_base.cpp
==============================================================================
--- trunk/libs/asio/test/socket_base.cpp (original)
+++ trunk/libs/asio/test/socket_base.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,9 @@
 // Test that header file is self-contained.
 #include <boost/asio/socket_base.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/ip/udp.hpp>
 #include "unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/strand.cpp
==============================================================================
--- trunk/libs/asio/test/strand.cpp (original)
+++ trunk/libs/asio/test/strand.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -17,9 +17,10 @@
 #include <boost/asio/strand.hpp>
 
 #include <sstream>
-#include <boost/bind.hpp>
-#include <boost/asio.hpp>
 #include <boost/thread.hpp>
+#include <boost/bind.hpp>
+#include <boost/asio/deadline_timer.hpp>
+#include <boost/asio/io_service.hpp>
 #include "unit_test.hpp"
 
 using namespace boost::asio;

Modified: trunk/libs/asio/test/windows/overlapped_ptr.cpp
==============================================================================
--- trunk/libs/asio/test/windows/overlapped_ptr.cpp (original)
+++ trunk/libs/asio/test/windows/overlapped_ptr.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,7 @@
 // Test that header file is self-contained.
 #include <boost/asio/windows/overlapped_ptr.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
 #include "../unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/windows/random_access_handle.cpp
==============================================================================
--- trunk/libs/asio/test/windows/random_access_handle.cpp (original)
+++ trunk/libs/asio/test/windows/random_access_handle.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,7 @@
 // Test that header file is self-contained.
 #include <boost/asio/windows/random_access_handle.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
 #include "../unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/windows/stream_handle.cpp
==============================================================================
--- trunk/libs/asio/test/windows/stream_handle.cpp (original)
+++ trunk/libs/asio/test/windows/stream_handle.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -16,7 +16,7 @@
 // Test that header file is self-contained.
 #include <boost/asio/windows/stream_handle.hpp>
 
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
 #include "../unit_test.hpp"
 
 //------------------------------------------------------------------------------

Modified: trunk/libs/asio/test/write.cpp
==============================================================================
--- trunk/libs/asio/test/write.cpp (original)
+++ trunk/libs/asio/test/write.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -19,7 +19,8 @@
 #include <boost/bind.hpp>
 #include <boost/noncopyable.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/placeholders.hpp>
 #include "unit_test.hpp"
 
 using namespace std; // For memcmp, memcpy and memset.

Modified: trunk/libs/asio/test/write_at.cpp
==============================================================================
--- trunk/libs/asio/test/write_at.cpp (original)
+++ trunk/libs/asio/test/write_at.cpp 2010-01-02 02:18:09 EST (Sat, 02 Jan 2010)
@@ -19,7 +19,8 @@
 #include <boost/bind.hpp>
 #include <boost/noncopyable.hpp>
 #include <cstring>
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/placeholders.hpp>
 #include "unit_test.hpp"
 
 using namespace std; // For memcmp, memcpy and memset.


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk