Boost logo

Boost-Commit :

From: steven_at_[hidden]
Date: 2008-05-13 22:59:49


Author: steven_watanabe
Date: 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
New Revision: 45349
URL: http://svn.boost.org/trac/boost/changeset/45349

Log:
Made base units in other/ support output and made their documentation better
Text files modified:
   sandbox/units/boost/units/systems/other/angstrom.hpp | 10 +++++++++-
   sandbox/units/boost/units/systems/other/apothecaries_dram.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/apothecaries_ounce.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/apothecaries_pound.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/apothecaries_scruple.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/avoirdupois_ounce.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/avoirdupois_pound.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/bushel.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/dry_quart.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/fluid_dram.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/fluid_ounce.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/gallon.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/gill.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/liquid_pint.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/liquid_quart.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/peck.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/pennyweight.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/short_hundredweight.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/short_ton.hpp | 8 ++++++++
   sandbox/units/boost/units/systems/other/ton.hpp | 8 ++++++++
   sandbox/units/libs/units/doc/Jamfile.v2 | 9 +++++++++
   21 files changed, 170 insertions(+), 1 deletions(-)

Modified: sandbox/units/boost/units/systems/other/angstrom.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/angstrom.hpp (original)
+++ sandbox/units/boost/units/systems/other/angstrom.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,15 +13,23 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/base_units/meter.hpp>
 
 namespace boost {
 namespace units {
 namespace metric {
 
-typedef scaled_base_unit<meter_base_unit, scale<10, static_rational<10> > > angstrom_base_unit;
+typedef scaled_base_unit<meter_base_unit, scale<10, static_rational<-10> > > angstrom_base_unit;
 
 }
+
+template<>
+struct base_unit_info<metric::angstrom_base_unit> {
+ static const char* name() { return("angstrom"); }
+ static const char* symbol() { return("Å"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/apothecaries_dram.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/apothecaries_dram.hpp (original)
+++ sandbox/units/boost/units/systems/other/apothecaries_dram.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/grain.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<grain_base_unit, scale<60, static_rational<1> > > apothecaries_dram_base_unit; //3.8879346e-3*kilograms
 }
+
+template<>
+struct base_unit_info<us::apothecaries_dram_base_unit> {
+ static const char* name() { return("apothecaries_dram"); }
+ static const char* symbol() { return("apothecaries_dram"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/apothecaries_ounce.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/apothecaries_ounce.hpp (original)
+++ sandbox/units/boost/units/systems/other/apothecaries_ounce.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/apothecaries_dram.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<apothecaries_dram_base_unit, scale<2, static_rational<3> > > apothecaries_ounce_base_unit; //3.11034768e-2*kilograms
 }
+
+template<>
+struct base_unit_info<us::apothecaries_ounce_base_unit> {
+ static const char* name() { return("apothecaries_ounce"); }
+ static const char* symbol() { return("apothecaries_ounce"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/apothecaries_pound.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/apothecaries_pound.hpp (original)
+++ sandbox/units/boost/units/systems/other/apothecaries_pound.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/apothecaries_ounce.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<apothecaries_ounce_base_unit, scale<12, static_rational<1> > > apothecaries_pound_base_unit;//3.732417216e-1*kilograms
 }
+
+template<>
+struct base_unit_info<us::apothecaries_pound_base_unit> {
+ static const char* name() { return("apothecaries_pound"); }
+ static const char* symbol() { return("apothecaries_pound"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/apothecaries_scruple.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/apothecaries_scruple.hpp (original)
+++ sandbox/units/boost/units/systems/other/apothecaries_scruple.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/grain.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<grain_base_unit, scale<20, static_rational<1> > > apothecaries_scruple_base_unit; //1.2959782e-3*kilograms
 }
+
+template<>
+struct base_unit_info<us::apothecaries_scruple_base_unit> {
+ static const char* name() { return("apothecaries_scruple"); }
+ static const char* symbol() { return("apothecaries_scruple"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/avoirdupois_ounce.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/avoirdupois_ounce.hpp (original)
+++ sandbox/units/boost/units/systems/other/avoirdupois_ounce.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/avoirdupois_dram.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<avoirdupois_dram_base_unit, scale<2, static_rational<4> > > avoirdupois_ounce_base_unit; //2.8349523125e-2*kilograms
 }
+
+template<>
+struct base_unit_info<us::avoirdupois_ounce_base_unit> {
+ static const char* name() { return("avoirdupois_ounce"); }
+ static const char* symbol() { return("oz"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/avoirdupois_pound.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/avoirdupois_pound.hpp (original)
+++ sandbox/units/boost/units/systems/other/avoirdupois_pound.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/avoirdupois_dram.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<avoirdupois_dram_base_unit, scale<2, static_rational<8> > > avoirdupois_pound_base_unit; //4.5359237e-1*kilograms
 }
+
+template<>
+struct base_unit_info<us::avoirdupois_pound_base_unit> {
+ static const char* name() { return("avoirdupois_pound"); }
+ static const char* symbol() { return("lb"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/bushel.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/bushel.hpp (original)
+++ sandbox/units/boost/units/systems/other/bushel.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/dry_pint.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<dry_pint_base_unit, scale<2, static_rational<6> > > bushel_base_unit; //3.523907e-2*cubic_meters
 }
+
+template<>
+struct base_unit_info<us::bushel_base_unit> {
+ static const char* name() { return("bushel"); }
+ static const char* symbol() { return("bushel"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/dry_quart.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/dry_quart.hpp (original)
+++ sandbox/units/boost/units/systems/other/dry_quart.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/dry_pint.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<dry_pint_base_unit, scale<2, static_rational<1> > > dry_quart_base_unit; //1.101221e-3*cubic_meters
 }
+
+template<>
+struct base_unit_info<us::dry_quart_base_unit> {
+ static const char* name() { return("dry_quart"); }
+ static const char* symbol() { return("dry_quart"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/fluid_dram.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/fluid_dram.hpp (original)
+++ sandbox/units/boost/units/systems/other/fluid_dram.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/minim.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<minim_base_unit, scale<60, static_rational<1> > > fluid_dram_base_unit; //3.696691e-6*cubic_meters
 }
+
+template<>
+struct base_unit_info<us::fluid_dram_base_unit> {
+ static const char* name() { return("fluid_dram"); }
+ static const char* symbol() { return("fluid_dram"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/fluid_ounce.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/fluid_ounce.hpp (original)
+++ sandbox/units/boost/units/systems/other/fluid_ounce.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/fluid_dram.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<fluid_dram_base_unit, scale<2, static_rational<3> > > fluid_ounce_base_unit; //2.957353e-5*cubic_meters
 }
+
+template<>
+struct base_unit_info<us::fluid_ounce_base_unit> {
+ static const char* name() { return("fluid_ounce"); }
+ static const char* symbol() { return("oz"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/gallon.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/gallon.hpp (original)
+++ sandbox/units/boost/units/systems/other/gallon.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/fluid_dram.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<fluid_dram_base_unit, scale<2, static_rational<10> > > gallon_base_unit; //3.785412e-3*cubic_meters
 }
+
+template<>
+struct base_unit_info<us::gallon_base_unit> {
+ static const char* name() { return("gallon"); }
+ static const char* symbol() { return("gal"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/gill.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/gill.hpp (original)
+++ sandbox/units/boost/units/systems/other/gill.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/fluid_dram.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<fluid_dram_base_unit, scale<2, static_rational<5> > > gill_base_unit; //1.182941e-4*cubic_meters
 }
+
+template<>
+struct base_unit_info<us::gill_base_unit> {
+ static const char* name() { return("gill"); }
+ static const char* symbol() { return("gill"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/liquid_pint.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/liquid_pint.hpp (original)
+++ sandbox/units/boost/units/systems/other/liquid_pint.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/fluid_dram.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<fluid_dram_base_unit, scale<2, static_rational<7> > > liquid_pint_base_unit; //4.731765e-4*cubic_meters
 }
+
+template<>
+struct base_unit_info<us::liquid_pint_base_unit> {
+ static const char* name() { return("liquid_pint"); }
+ static const char* symbol() { return("pt"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/liquid_quart.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/liquid_quart.hpp (original)
+++ sandbox/units/boost/units/systems/other/liquid_quart.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/fluid_dram.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<fluid_dram_base_unit, scale<2, static_rational<8> > > liquid_quart_base_unit; //9.463529e-4*cubic_meters
 }
+
+template<>
+struct base_unit_info<us::liquid_quart_base_unit> {
+ static const char* name() { return("liquid_quart"); }
+ static const char* symbol() { return("qt"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/peck.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/peck.hpp (original)
+++ sandbox/units/boost/units/systems/other/peck.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/dry_pint.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<dry_pint_base_unit, scale<2, static_rational<4> > > peck_base_unit; //8.809768e-3*cubic_meters
 }
+
+template<>
+struct base_unit_info<us::peck_base_unit> {
+ static const char* name() { return("peck"); }
+ static const char* symbol() { return("peck"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/pennyweight.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/pennyweight.hpp (original)
+++ sandbox/units/boost/units/systems/other/pennyweight.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/grain.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<grain_base_unit, scale<24, static_rational<1> > > pennyweight_base_unit; //1.55517384e-3*kilograms
 }
+
+template<>
+struct base_unit_info<us::pennyweight_base_unit> {
+ static const char* name() { return("pennyweight"); }
+ static const char* symbol() { return("pennyweight"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/short_hundredweight.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/short_hundredweight.hpp (original)
+++ sandbox/units/boost/units/systems/other/short_hundredweight.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/avoirdupois_pound.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<avoirdupois_pound_base_unit, scale<10, static_rational<2> > > short_hundredweight_base_unit; //4.5359237e1*kilograms
 }
+
+template<>
+struct base_unit_info<us::short_hundredweight_base_unit> {
+ static const char* name() { return("short_hundredweight"); }
+ static const char* symbol() { return("short_hundredweight"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/short_ton.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/short_ton.hpp (original)
+++ sandbox/units/boost/units/systems/other/short_ton.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/other/avoirdupois_pound.hpp>
 
 namespace boost {
@@ -20,6 +21,13 @@
 namespace us {
 typedef scaled_base_unit<avoirdupois_pound_base_unit, scale<2000, static_rational<1> > > short_ton_base_unit; //9.0718474e2*kilograms
 }
+
+template<>
+struct base_unit_info<us::short_ton_base_unit> {
+ static const char* name() { return("short_ton"); }
+ static const char* symbol() { return("short_ton"); }
+};
+
 }
 }
 

Modified: sandbox/units/boost/units/systems/other/ton.hpp
==============================================================================
--- sandbox/units/boost/units/systems/other/ton.hpp (original)
+++ sandbox/units/boost/units/systems/other/ton.hpp 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -13,6 +13,7 @@
 
 #include <boost/units/scaled_base_unit.hpp>
 #include <boost/units/static_rational.hpp>
+#include <boost/units/units_fwd.hpp>
 #include <boost/units/systems/base_units/kilogram.hpp>
 
 namespace boost {
@@ -22,6 +23,13 @@
 typedef scaled_base_unit<kilogram_base_unit, scale<10, static_rational<3> > > ton_base_unit;
 
 }
+
+template<>
+struct base_unit_info<metric::ton_base_unit> {
+ static const char* name() { return("ton"); }
+ static const char* symbol() { return("ton"); }
+};
+
 }
 }
 

Modified: sandbox/units/libs/units/doc/Jamfile.v2
==============================================================================
--- sandbox/units/libs/units/doc/Jamfile.v2 (original)
+++ sandbox/units/libs/units/doc/Jamfile.v2 2008-05-13 22:59:47 EDT (Tue, 13 May 2008)
@@ -25,11 +25,20 @@
     $(files)
   :
         <doxygen:param>EXTRACT_ALL=YES
+
+# Horribly ugly, but then macros usually are :(
         <doxygen:param>"PREDEFINED=\"BOOST_UNITS_STATIC_CONSTANT(a,b)=static const b a\" \\
                                    \"BOOST_UNITS_AUTO_STATIC_CONSTANT(a,b)=static const auto a = b\" \\
                                    \"BOOST_UNITS_TYPEOF(a)=typeof(a)\" \\
                                    \"BOOST_PREVENT_MACRO_SUBSTITUTION=\" \\
                                    \"BOOST_UNITS_HAS_TYPEOF=1\" \\
+ \"BOOST_UNITS_NON_SI_UNIT(namespace_, name_, symbol_, factor, other_unit, id)= \\
+ namespace boost { namespace units { namespace namespace_ { \\
+ struct name_ ## _base_unit : boost::units::base_unit<name_ ## _base_unit, other_unit::dimension_type, id> { \\
+ static const char* name(); \\
+ static const char* symbol(); \\
+ }; \\
+ } } }\" \\
                                    \"BOOST_UNITS_DOXYGEN=1\""
         <doxygen:param>HIDE_UNDOC_MEMBERS=NO
         <doxygen:param>EXTRACT_PRIVATE=NO


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