summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschmidt <douglascraigschmidt@users.noreply.github.com>1998-08-21 17:01:57 +0000
committerschmidt <douglascraigschmidt@users.noreply.github.com>1998-08-21 17:01:57 +0000
commit020e9c4bdb9a7cec3268e79c4ec1c984e23ade3a (patch)
tree1657f14d2958723e1567630ed07d90cd83b923b4
parent06977b8c5d2764a63a1a743a72b76d746065d2e5 (diff)
downloadATCD-020e9c4bdb9a7cec3268e79c4ec1c984e23ade3a.tar.gz
*** empty log message ***
-rw-r--r--apps/gperf/ChangeLog5
-rw-r--r--apps/gperf/src/Options.cpp226
-rw-r--r--etc/ACE-porting.html5
-rw-r--r--etc/ACE-subsets.html684
-rw-r--r--etc/DOC-way.html53
5 files changed, 905 insertions, 68 deletions
diff --git a/apps/gperf/ChangeLog b/apps/gperf/ChangeLog
index b75562e6f8e..b3d26e3fecb 100644
--- a/apps/gperf/ChangeLog
+++ b/apps/gperf/ChangeLog
@@ -1,3 +1,8 @@
+Fri Aug 21 11:57:57 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
+
+ * src/Options.cpp (operator): Fixed '%e' to be '%r' to come up to
+ speed with ACE changes.
+
Sat Aug 15 07:59:58 1998 David L. Levine <levine@cs.wustl.edu>
* src/gperf.cpp (main): added ACE_UNUSED_ARGS for argc and
diff --git a/apps/gperf/src/Options.cpp b/apps/gperf/src/Options.cpp
index f12925bd821..cbb6da2d9dd 100644
--- a/apps/gperf/src/Options.cpp
+++ b/apps/gperf/src/Options.cpp
@@ -78,7 +78,9 @@ void
Options::usage (void)
{
ACE_ERROR ((LM_ERROR,
- "Usage: %n [-acCdDef[num]gGhH<hashname>i<init>IjJk<keys>K<keyname>lL<language>mMnN<function name>oOprs<size>S<switches>tTvZ<class name>].\n"
+ "Usage: %n [-acCdDef[num]gGhH<hashname>i<init>IjJ"
+ "k<keys>K<keyname>lL<language>mMnN<function name>o"
+ "Oprs<size>S<switches>tTvZ<class name>].\n"
"(type %n -h for help)\n"));
}
@@ -89,12 +91,13 @@ Options::print_options (void)
{
int i;
- printf ("/* Command-line: ");
+ ACE_OS::printf ("/* Command-line: ");
for (i = 0; i < argument_count; i++)
- printf ("%s ", argument_vector[i]);
+ ACE_OS::printf ("%s ",
+ argument_vector[i]);
- printf (" */");
+ ACE_OS::printf (" */");
}
// Sorts the key positions *IN REVERSE ORDER!!* This makes further
@@ -114,7 +117,8 @@ Options::key_sort (char *base, int len)
for (curr = i + 1, tmp = base[curr];
curr > 0 && tmp >= base[curr - 1];
curr--)
- if ((base[curr] = base[curr - 1]) == tmp) // oh no, a duplicate!!!
+ if ((base[curr] = base[curr - 1]) == tmp)
+ // Oh no, a duplicate!!!
return 0;
base[curr] = tmp;
@@ -218,34 +222,41 @@ Options::operator() (int argc, char *argv[])
{
switch (option_char)
{
- case 'a': // Generated coded uses the ANSI prototype format.
+ // Generated coded uses the ANSI prototype format.
+ case 'a':
{
ACE_SET_BITS (option_word, ANSI);
break;
}
- case 'c': // Generate strncmp rather than strcmp.
+ // Generate strncmp rather than strcmp.
+ case 'c':
{
ACE_SET_BITS (option_word, COMP);
break;
}
- case 'C': // Make the generated tables readonly (const).
+ // Make the generated tables readonly (const).
+ case 'C':
{
ACE_SET_BITS (option_word, CONSTANT);
break;
}
- case 'd': // Enable debugging option.
+ // Enable debugging option.
+ case 'd':
{
ACE_SET_BITS (option_word, DEBUG);
- ACE_ERROR ((LM_ERROR, "Starting program %n, version %s, with debuggin on.\n",
- version_string));
+ ACE_ERROR ((LM_ERROR,
+ "Starting program %n, version %s, with debuggin on.\n",
+ version_string));
break;
}
- case 'D': // Enable duplicate option.
+ // Enable duplicate option.
+ case 'D':
{
ACE_SET_BITS (option_word, DUP);
break;
}
- case 'e': // Allows user to provide keyword/attribute separator
+ // Allows user to provide keyword/attribute separator
+ case 'e':
{
option.delimiters = getopt.optarg;
break;
@@ -255,7 +266,8 @@ Options::operator() (int argc, char *argv[])
ACE_SET_BITS (option_word, ENUM);
break;
}
- case 'f': // Generate the hash table ``fast.''
+ // Generate the hash table ``fast.''
+ case 'f':
{
ACE_SET_BITS (option_word, FAST);
if ((iterations = atoi (getopt.optarg)) < 0)
@@ -265,17 +277,20 @@ Options::operator() (int argc, char *argv[])
}
break;
}
- case 'g': // Use the ``inline'' keyword for generated sub-routines.
+ // Use the ``inline'' keyword for generated sub-routines.
+ case 'g':
{
ACE_SET_BITS (option_word, INLINE);
break;
}
- case 'G': // Make the keyword table a global variable.
+ // Make the keyword table a global variable.
+ case 'G':
{
ACE_SET_BITS (option_word, GLOBAL);
break;
}
- case 'h': // Displays a list of helpful Options to the user.
+ // Displays a list of helpful Options to the user.
+ case 'h':
{
ACE_OS::fprintf (stderr,
"-a\tGenerate ANSI standard C output code, i.e., function prototypes.\n"
@@ -362,17 +377,23 @@ Options::operator() (int argc, char *argv[])
Options::usage ();
ACE_OS::_exit (1);
}
- case 'H': // Sets the name for the hash function.
+ // Sets the name for the hash function.
+ case 'H':
{
hash_name = getopt.optarg;
break;
}
- case 'i': // Sets the initial value for the associated values array.
+ // Sets the initial value for the associated values array.
+ case 'i':
{
- if ((initial_asso_value = atoi (getopt.optarg)) < 0)
- ACE_ERROR ((LM_ERROR, "Initial value %d should be non-zero, ignoring and continuing.\n", initial_asso_value));
+ initial_asso_value = atoi (getopt.optarg);
+ if (initial_asso_value < 0)
+ ACE_ERROR ((LM_ERROR,
+ "Initial value %d should be non-zero, ignoring and continuing.\n",
+ initial_asso_value));
if (option[RANDOM])
- ACE_ERROR ((LM_ERROR, "warning, -r option superceeds -i, ignoring -i option and continuing\n"));
+ ACE_ERROR ((LM_ERROR,
+ "warning, -r option superceeds -i, ignoring -i option and continuing\n"));
break;
}
case 'I':
@@ -380,44 +401,72 @@ Options::operator() (int argc, char *argv[])
ACE_SET_BITS (option_word, STRCASECMP);
break;
}
- case 'j': // Sets the jump value, must be odd for later algorithms.
+ // Sets the jump value, must be odd for later algorithms.
+ case 'j':
{
- if ((jump = atoi (getopt.optarg)) < 0)
- ACE_ERROR ((LM_ERROR, "Jump value %d must be a positive number.\n%e%a", jump, usage, 1));
+ jump = atoi (getopt.optarg);
+ if (jump < 0)
+ ACE_ERROR ((LM_ERROR,
+ "Jump value %d must be a positive number.\n%r%a",
+ jump,
+ &Options::usage,
+ 1));
else if (jump && ACE_EVEN (jump))
- ACE_ERROR ((LM_ERROR, "Jump value %d should be odd, adding 1 and continuing...\n", jump++));
+ ACE_ERROR ((LM_ERROR,
+ "Jump value %d should be odd, adding 1 and continuing...\n",
+ jump++));
break;
}
- case 'J': // Skip including the header file string.h.
+ // Skip including the header file string.h.
+ case 'J':
{
ACE_SET_BITS (option_word, SKIPSTRINGH);
break;
}
- case 'k': // Sets key positions used for hash function.
+ // Sets key positions used for hash function.
+ case 'k':
{
const int BAD_VALUE = -1;
- int value;
- Iterator expand (getopt.optarg, 1, MAX_KEY_POS - 1, WORD_END, BAD_VALUE, EOS);
-
- if (*getopt.optarg == '*') // Use all the characters for hashing!!!!
+ int value;
+ Iterator expand (getopt.optarg,
+ 1,
+ MAX_KEY_POS - 1,
+ WORD_END,
+ BAD_VALUE,
+ EOS);
+
+ // Use all the characters for hashing!!!!
+ if (*getopt.optarg == '*')
option_word = (option_word & ~DEFAULTCHARS) | ALLCHARS;
else
{
char *l_key_pos;
- for (l_key_pos = key_positions; (value = expand ()) != EOS; l_key_pos++)
+ for (l_key_pos = key_positions;
+ (value = expand ()) != EOS;
+ l_key_pos++)
if (value == BAD_VALUE)
- ACE_ERROR ((LM_ERROR, "Illegal key value or range, use 1,2,3-%d,'$' or '*'.\n%e%a",
- MAX_KEY_POS - 1, usage, 1));
+ ACE_ERROR ((LM_ERROR,
+ "Illegal key value or range, use 1,2,3-%d,'$' or '*'.\n%r%a",
+ MAX_KEY_POS - 1,
+ usage,
+ 1));
else
*l_key_pos = value;;
*l_key_pos = EOS;
- if (! (total_keysig_size = (l_key_pos - key_positions)))
- ACE_ERROR ((LM_ERROR, "No keys selected.\n%e%a", usage, 1));
- else if (! key_sort (key_positions, total_keysig_size))
- ACE_ERROR ((LM_ERROR, "Duplicate keys selected\n%e%a", usage, 1));
+ total_keysig_size = (l_key_pos - key_positions);
+ if (total_keysig_size == 0)
+ ACE_ERROR ((LM_ERROR,
+ "No keys selected.\n%r%a",
+ &Options::usage,
+ 1));
+ else if (key_sort (key_positions, total_keysig_size) == 0)
+ ACE_ERROR ((LM_ERROR,
+ "Duplicate keys selected\n%r%a",
+ &Options::usage,
+ 1));
if (total_keysig_size != 2
|| (key_positions[0] != 1 || key_positions[1] != WORD_END))
@@ -425,17 +474,20 @@ Options::operator() (int argc, char *argv[])
}
break;
}
- case 'K': // Make this the keyname for the keyword component field.
+ // Make this the keyname for the keyword component field.
+ case 'K':
{
key_name = getopt.optarg;
break;
}
- case 'l': // Create length table to avoid extra string compares.
+ // Create length table to avoid extra string compares.
+ case 'l':
{
ACE_SET_BITS (option_word, LENTABLE);
break;
}
- case 'L': // Deal with different generated languages.
+ // Deal with different generated languages.
+ case 'L':
{
option_word &= ~C;
if (!strcmp (getopt.optarg, "C++"))
@@ -444,32 +496,39 @@ Options::operator() (int argc, char *argv[])
ACE_SET_BITS (option_word, C);
else
{
- ACE_ERROR ((LM_ERROR, "unsupported language option %s, defaulting to C\n", getopt.optarg));
+ ACE_ERROR ((LM_ERROR,
+ "unsupported language option %s, defaulting to C\n",
+ getopt.optarg));
ACE_SET_BITS (option_word, C);
}
break;
}
- case 'm': // Dont print the warnings.
+ // Don't print the warnings.
+ case 'm':
{
ACE_SET_BITS (option_word, MUTE);
break;
}
- case 'M': // Skip the class definition while in C++ mode.
+ // Skip the class definition while in C++ mode.
+ case 'M':
{
ACE_SET_BITS (option_word, SKIPCLASS);
break;
}
- case 'n': // Don't include the length when computing hash function.
+ // Don't include the length when computing hash function.
+ case 'n':
{
ACE_SET_BITS (option_word, NOLENGTH);
break;
}
- case 'N': // Make generated lookup function name be optarg
+ // Make generated lookup function name be optarg
+ case 'N':
{
function_name = getopt.optarg;
break;
}
- case 'o': // Order input by frequency of key set occurrence.
+ // Order input by frequency of key set occurrence.
+ case 'o':
{
ACE_SET_BITS (option_word, ORDER);
break;
@@ -479,59 +538,94 @@ Options::operator() (int argc, char *argv[])
ACE_SET_BITS (option_word, OPTIMIZE);
break;
}
- case 'p': // Generated lookup function now a pointer instead of int.
+ // Generated lookup function now a pointer instead of int.
+ case 'p':
{
ACE_SET_BITS (option_word, POINTER);
break;
}
- case 'r': // Utilize randomness to initialize the associated values table.
+ // Utilize randomness to initialize the associated values
+ // table.
+ case 'r':
{
ACE_SET_BITS (option_word, RANDOM);
if (option.initial_asso_value != 0)
- ACE_ERROR ((LM_ERROR, "warning, -r option superceeds -i, disabling -i option and continuing\n"));
+ ACE_ERROR ((LM_ERROR,
+ "warning, -r option superceeds -i, disabling -i option and continuing\n"));
break;
}
- case 's': // Range of associated values, determines size of final table.
+ // Range of associated values, determines size of final table.
+ case 's':
{
- if (abs (size = atoi (getopt.optarg)) > 50)
- ACE_ERROR ((LM_ERROR, "%d is excessive, did you really mean this?! (type %n -h for help)\n", size));
+ size = atoi (getopt.optarg);
+ if (abs (size) > 50)
+ ACE_ERROR ((LM_ERROR,
+ "%d is excessive, did you really mean this?! (type %n -h for help)\n",
+ size));
break;
}
- case 'S': // Generate switch statement output, rather than lookup table.
+ // Generate switch statement output, rather than lookup table.
+ case 'S':
{
ACE_SET_BITS (option_word, SWITCH);
- if ((option.total_switches = atoi (getopt.optarg)) <= 0)
- ACE_ERROR ((LM_ERROR, "number of switches %s must be a positive number\n%e%a", getopt.optarg, usage, 1));
+ option.total_switches = atoi (getopt.optarg);
+ if (option.total_switches <= 0)
+ ACE_ERROR ((LM_ERROR,
+ "number of switches %s must be a positive number\n%r%a",
+ getopt.optarg,
+ &Options::usage,
+ 1));
break;
}
- case 't': // Enable the TYPE mode, allowing arbitrary user structures.
+ // Enable the TYPE mode, allowing arbitrary user structures.
+ case 't':
{
ACE_SET_BITS (option_word, TYPE);
break;
}
- case 'T': // Don't print structure definition.
+ // Don't print structure definition.
+ case 'T':
{
ACE_SET_BITS (option_word, NOTYPE);
break;
}
- case 'v': // Print out the version and quit.
- ACE_ERROR ((LM_ERROR, "%n: version %s\n%e\n%a", version_string, usage, 1));
- case 'Z': // Set the class name.
+ // Print out the version and quit.
+ case 'v':
+ ACE_ERROR ((LM_ERROR,
+ "%n: version %s\n%r\n%a",
+ version_string,
+ &Options::usage,
+ 1));
+ // Set the class name.
+ case 'Z':
{
class_name = getopt.optarg;
break;
}
default:
- ACE_ERROR ((LM_ERROR, "%e%a", usage, 1));
+ ACE_ERROR ((LM_ERROR,
+ "%r%a",
+ &Options::usage,
+ 1));
}
}
- if (argv[getopt.optind] && ! freopen (argv[getopt.optind], "r", stdin))
- ACE_ERROR ((LM_ERROR, "Cannot open keyword file %p\n%e%a", argv[getopt.optind], usage, 1));
+ if (argv[getopt.optind] &&
+ freopen (argv[getopt.optind],
+ "r",
+ stdin) == 0)
+ ACE_ERROR ((LM_ERROR,
+ "Cannot open keyword file %p\n%r%a",
+ argv[getopt.optind],
+ &Options::usage,
+ 1));
if (++getopt.optind < argc)
- ACE_ERROR ((LM_ERROR, "Extra trailing arguments to %n.\n%e%a", usage, 1));
+ ACE_ERROR ((LM_ERROR,
+ "Extra trailing arguments to %n.\n%r%a",
+ usage,
+ 1));
}
// True if option enable, else false.
diff --git a/etc/ACE-porting.html b/etc/ACE-porting.html
index 1cb7389236e..c51e17ea6e4 100644
--- a/etc/ACE-porting.html
+++ b/etc/ACE-porting.html
@@ -138,8 +138,9 @@ The following is a list of which C++ features that ACE and TAO can
take advantage of if a compiler supports them:
<UL>
-<LI> <B>Exceptions</B> -- The ACE library itself does not catch or
- throw C++ exceptions. However, you can use exceptions in code
+<LI> <B>Exceptions</B> -- The ACE library itself is ``exception
+ neutral,'' <EM>i.e.,</EM> it does not catch or throw C++
+ exceptions. However, you can use exceptions in code
that uses ACE including throwing exceptions inside call back
methods, as long as you provide the code to handle it.
TAO can be configured to use C++ exceptions if ACE supports them,
diff --git a/etc/ACE-subsets.html b/etc/ACE-subsets.html
new file mode 100644
index 00000000000..a6bc60e8457
--- /dev/null
+++ b/etc/ACE-subsets.html
@@ -0,0 +1,684 @@
+<HTML>
+
+<HEAD>
+<TITLE>ACE Subsets</TITLE>
+
+<BODY text = "#000000"
+link="#000fff"
+vlink="#ff0f0f"
+bgcolor="#ffffff">
+
+<HR>
+<H3>Proposal for Splitting ACE into Multiple Libraries</H3>
+
+The following is a draft of our proposal for spliting ACE into
+multiple libraries, each of which will contain a smaller subset of the
+overall ACE functionality. The primary motivations for subsetting ACE
+are:
+
+<UL>
+<LI> <EM>Principle of parsimony</EM> -- <EM>i.e.</EM>, developers
+ should incur time/space overhead for components they use, rather
+ than for all the components in the ACE framework. <P>
+
+<LI> <EM>Simplify the learning curve</EM> -- <EM>i.e.</EM>, developers
+ only need to learn how to program components that they actually
+ use. <P>
+</UL>
+
+The main design goals of this proposal are as follows: <P>
+
+<OL>
+<LI> Support the original libACE as before. Thus, for users who
+want to use the existing ACE library as is, there will be
+no changes, i.e., just link with <CODE>libACE</CODE> as usual. <P>
+
+<LI> Allow ACE (and TAO) programmers to use smaller subsets of the
+entire <CODE>libACE</CODE> library. These subsets will include the
+following libraries: <P>
+
+<DL>
+
+<DT> <img alt="o" src="gifs/misc/redball.gif"> <CODE>libACE_OS</CODE>
+-- This library contains the OS adaptation layer and its supporting
+classes. All other ACE libraries will depend on
+<CODE>libACE_OS</CODE> and it will depend on <EM>no</EM> other ACE
+libraries. <P>
+
+<DT> <img alt="o" src="gifs/misc/redball.gif">
+<CODE>libACE_Utils</CODE> -- This library contains the various ACE
+container classes and other miscellaneous classes, such as Singleton,
+auto_ptr, timers, etc. This library will depend only on
+<CODE>libACE_OS</CODE>.<P>
+
+<DT> <img alt="o" src="gifs/misc/redball.gif">
+<CODE>libACE_Logging</CODE> -- This library contains the various ACE
+logging and tracing classes. This library will depend only on
+<CODE>libACE_OS</CODE>. <P>
+
+<DT> <img alt="o" src="gifs/misc/redball.gif">
+<CODE>libACE_Threads</CODE> -- This library contains the ACE
+thread/process management and synchronization classes. This library
+will depend only on <CODE>libACE_OS</CODE>. <P>
+
+<DT> <img alt="o" src="gifs/misc/redball.gif">
+<CODE>libACE_Demux</CODE> -- This library contains the ACE Reactor and
+Proactor classes. This library will depend on <CODE>libACE_OS</CODE>
+and <CODE>libACE_Thread</CODE>. <P>
+
+<DT> <img alt="o" src="gifs/misc/redball.gif">
+<CODE>libACE_Connection</CODE> -- This library contains the ACE
+Connection components, i.e., Acceptor, Connector, and Svc_Handler.
+This library will depend on <CODE>libACE_OS</CODE>,
+<CODE>libACE_Thread</CODE>, and <CODE>libACE_Demux</CODE>. <P>
+
+<DT> <img alt="o" src="gifs/misc/redball.gif">
+<CODE>libACE_Sockets</CODE> -- This library contains the ACE C++
+wrappers for sockets. This library will depend on
+<CODE>libACE_OS</CODE>. <P>
+
+<DT> <img alt="o" src="gifs/misc/redball.gif"> <CODE>libACE_IPC</CODE>
+-- This library contains all the ACE C++ wrappers for the other types
+of IPC and FILE I/O other than sockets. This library will depend on
+<CODE>libACE_OS</CODE> and <CODE>libACE_Sockets</CODE>. <P>
+
+<DT> <img alt="o" src="gifs/misc/redball.gif">
+<CODE>libACE_Svcconf</CODE> -- This library contains the ACE C++
+wrappers for the Service Configurator. This library will depend on
+<CODE>libACE_OS</CODE>, <CODE>libACE_Demux</CODE>,
+<CODE>libACE_Thread</CODE>, and <CODE>libACE_Sockets</CODE>. <P>
+
+<DT> <img alt="o" src="gifs/misc/redball.gif">
+<CODE>libACE_Streams</CODE> -- This library contains the ACE Streams
+classes. This library will depend on <CODE>libACE_OS</CODE>,
+<CODE>libACE_Demux</CODE>, and <CODE>libACE_Thread</CODE>. <P>
+
+<DT> <img alt="o" src="gifs/misc/redball.gif">
+<CODE>libACE_Memory</CODE> -- This library contains the ACE C++
+wrappers for shared memory and memory-mapped files. This library will
+depend on <CODE>libACE_OS</CODE>.<P>
+
+</DL>
+</OL>
+
+In addition, we will create <CODE>libACE_TAO</CODE>, which contains
+just the core set of components in ACE that are required to support
+TAO. This library is targeted at embedded systems developers who want
+to minimize the footprint of ACE+TAO. <P>
+
+Note that the ACE library subsets described above are intended as a
+guideline, <EM>not</EM> a complete specification. The actual
+partitioning of files in the final ACE library subsets may differ
+somewhat in order to improve footprint and simplify common
+use-cases. <P>
+
+<HR><P>
+<H3>Configuration Management</H3>
+
+Configuration management for the ACE library subsets described above
+will be organized as follows:
+
+<OL>
+<LI> A single source tree with a single "version" for the source
+ tree. <P>
+
+<LI> Releases of libACE and its "subsets" will be atomic, <EM>i.e.</EM>,
+ all or nothing. <P>
+</OL>
+
+<HR><P>
+<H3>Classes in Each ACE Library Subset</H3>
+
+Below, we describe the classes in each ACE library subset.
+
+<H4>libACE_OS</H4>
+
+This library contains the OS adaptation layer and its supporting
+classes. The classes in this library should not depend on any other
+ACE library subsets. All of the other libraries will depend on this
+library. The following classes are included in this library.
+
+<PRE><CODE>
+ACE.cpp
+ACE.h
+ACE.i
+config.h
+Basic_Types.cpp
+Basic_Types.h
+Basic_Types.i
+OS.cpp
+OS.h
+OS.i
+Version.h
+</PRE></CODE>
+
+<H4>libACE_Utils</H4>
+
+This library contains the following ACE container classes and other
+miscellaneous classes.
+
+<PRE><CODE>
+ARGV.cpp
+ARGV.h
+ARGV.i
+Array.cpp
+Array.h
+Array.i
+Auto_Ptr.cpp
+Auto_Ptr.h
+Auto_Ptr.i
+Containers.cpp
+Containers.i
+Containers.h
+Date_Time.cpp
+Date_Time.h
+Date_Time.i
+Dynamic.cpp
+Dynamic.h
+Dynamic.i
+Filecache.cpp
+Filecache.h
+Free_List.cpp
+Free_List.i
+Free_List.h
+Get_Opt.cpp
+Get_Opt.h
+Get_Opt.i
+Hash_Map_Manager.cpp
+Hash_Map_Manager.h
+High_Res_Timer.cpp
+High_Res_Timer.h
+High_Res_Timer.i
+Managed_Object.cpp
+Managed_Object.h
+Managed_Object.i
+Map_Manager.cpp
+Map_Manager.h
+Map_Manager.i
+Object_Manager.cpp
+Object_Manager.i
+Object_Manager.h
+Profile_Timer.cpp
+Profile_Timer.h
+Profile_Timer.i
+Registry.cpp
+Registry.h
+Singleton.cpp
+Singleton.h
+Singleton.i
+SString.cpp
+SString.h
+SString.i
+System_Time.cpp
+System_Time.h
+Time_Request_Reply.cpp
+Time_Request_Reply.h
+Time_Value.cpp
+Time_Value.h
+Time_Value.i
+Timer_Hash.cpp
+Timer_Hash.h
+Timer_Hash_T.cpp
+Timer_Hash_T.h
+Timer_Heap.cpp
+Timer_Heap.h
+Timer_Heap.i
+Timer_Heap_T.cpp
+Timer_Heap_T.h
+Timer_Heap_T.i
+Timer_List.cpp
+Timer_List.h
+Timer_List.i
+Timer_List_T.cpp
+Timer_List_T.h
+Timer_List_T.i
+Timer_Queue.cpp
+Timer_Queue.h
+Timer_Queue.i
+Timer_Queue_Adapters.cpp
+Timer_Queue_Adapters.h
+Timer_Queue_Adapters.i
+Timer_Queue_T.cpp
+Timer_Queue_T.h
+Timer_Queue_T.i
+Timer_Wheel.cpp
+Timer_Wheel.h
+Timer_Wheel.i
+Timer_Wheel_T.cpp
+Timer_Wheel_T.h
+Timer_Wheel_T.i
+</PRE></CODE>
+
+<H4>libACE_Logging</H4>
+
+This library contains the various ACE logging and tracing classes.
+
+<PRE><CODE>
+Dump.cpp
+Dump.h
+Dump_T.cpp
+Dump_T.h
+Log_Msg.cpp
+Log_Msg.h
+Log_Msg.i
+Log_Priority.h
+Log_Record.cpp
+Log_Record.h
+Log_Record.i
+Trace.cpp
+Trace.h
+Trace.i
+</PRE></CODE>
+
+<H4>libACE_Threads</H4>
+
+This library contains the ACE thread/process management and
+synchronization classes.
+
+<PRE><CODE>
+Activation_Queue.h
+Activation_Queue.cpp
+Atomic_Op.i
+Future.h
+Future.cpp
+Method_Object.h
+Method_Object.cpp
+Process.cpp
+Process.h
+Process.i
+Process_Manager.cpp
+Process_Manager.h
+Process_Manager.i
+Sched_Params.cpp
+Sched_Params.h
+Sched_Params.i
+Synch.cpp
+Synch.h
+Synch.i
+Synch_Options.cpp
+Synch_Options.h
+Synch_Options.i
+Synch_T.cpp
+Synch_T.h
+Synch_T.i
+Thread.cpp
+Thread.h
+Thread.i
+Thread_Manager.cpp
+Thread_Manager.h
+Thread_Manager.i
+Token.cpp
+Token.h
+Token.i
+</PRE></CODE>
+
+<H4>libACE_Demux</H4>
+
+This library contains the ACE Reactor and its associated classes,
+including the ACE Connection components.
+
+<PRE><CODE>
+Event_Handler.cpp
+Event_Handler.h
+Event_Handler.i
+Event_Handler_T.cpp
+Event_Handler_T.h
+Event_Handler_T.i
+Handle_Set.cpp
+Handle_Set.h
+Handle_Set.i
+Priority_Reactor.cpp
+Priority_Reactor.i
+Priority_Reactor.h
+Proactor.h
+Proactor.i
+Proactor.cpp
+Reactor.cpp
+Reactor.h
+Reactor.i
+Reactor_Impl.h
+Select_Reactor.cpp
+Select_Reactor.h
+Select_Reactor.i
+WFMO_Reactor.cpp
+WFMO_Reactor.h
+WFMO_Reactor.i
+XtReactor.cpp
+XtReactor.h
+</PRE></CODE>
+
+<H4>libACE_Connection</H4>
+
+This library contains the ACE Connection components, i.e., Acceptor,
+Connector, and Svc_Handler.
+
+<PRE><CODE>
+Acceptor.cpp
+Acceptor.h
+Acceptor.i
+Asynch_Acceptor.cpp
+Asynch_Acceptor.h
+Asynch_Acceptor.i
+Asynch_IO.cpp
+Asynch_IO.h
+Asynch_IO.i
+Connector.cpp
+Connector.h
+Connector.i
+Dynamic_Service.cpp
+Dynamic_Service.h
+Dynamic_Service.i
+Strategies.cpp
+Strategies.h
+Strategies.i
+Strategies_T.cpp
+Strategies_T.h
+Strategies_T.i
+Svc_Handler.cpp
+Svc_Handler.h
+Svc_Handler.i
+</PRE></CODE>
+
+<H4>libACE_Sockets</H4>
+
+This library contains the ACE C++ wrappers for sockets.
+
+<PRE><CODE>
+IPC_SAP.cpp
+IPC_SAP.h
+IPC_SAP.i
+LOCK_SOCK_Acceptor.cpp
+LOCK_SOCK_Acceptor.h
+LSOCK.cpp
+LSOCK.h
+LSOCK.i
+LSOCK_Acceptor.cpp
+LSOCK_Acceptor.h
+LSOCK_Acceptor.i
+LSOCK_CODgram.cpp
+LSOCK_CODgram.h
+LSOCK_CODgram.i
+LSOCK_Connector.cpp
+LSOCK_Connector.h
+LSOCK_Connector.i
+LSOCK_Dgram.cpp
+LSOCK_Dgram.h
+LSOCK_Dgram.i
+LSOCK_Stream.cpp
+LSOCK_Stream.h
+LSOCK_Stream.i
+SOCK.cpp
+SOCK.h
+SOCK.i
+SOCK_Acceptor.cpp
+SOCK_Acceptor.h
+SOCK_Acceptor.i
+SOCK_CODgram.cpp
+SOCK_CODgram.h
+SOCK_CODgram.i
+SOCK_Connector.cpp
+SOCK_Connector.h
+SOCK_Connector.i
+SOCK_Dgram.cpp
+SOCK_Dgram.h
+SOCK_Dgram.i
+SOCK_Dgram_Bcast.cpp
+SOCK_Dgram_Bcast.h
+SOCK_Dgram_Bcast.i
+SOCK_Dgram_Mcast.cpp
+SOCK_Dgram_Mcast.h
+SOCK_Dgram_Mcast.i
+SOCK_IO.cpp
+SOCK_IO.h
+SOCK_IO.i
+SOCK_Stream.cpp
+SOCK_Stream.h
+SOCK_Stream.i
+
+</PRE></CODE>
+
+<H4>libACE_IPC</H4>
+
+This library contains all the ACE C++ wrappers for the other types of
+IPC and FILE I/O other than sockets. This library will depend on the
+<CODE>libACE_Socket</CODE> library.
+
+<PRE><CODE>
+
+Addr.cpp
+Addr.h
+Addr.i
+DEV.cpp
+DEV.h
+DEV.i
+DEV_Addr.cpp
+DEV_Addr.h
+DEV_Addr.i
+DEV_Connector.cpp
+DEV_Connector.h
+DEV_Connector.i
+DEV_IO.cpp
+DEV_IO.h
+DEV_IO.i
+FIFO.cpp
+FIFO.h
+FIFO.i
+FIFO_Recv.cpp
+FIFO_Recv.h
+FIFO_Recv.i
+FIFO_Recv_Msg.cpp
+FIFO_Recv_Msg.h
+FIFO_Recv_Msg.i
+FIFO_Send.cpp
+FIFO_Send.h
+FIFO_Send.i
+FIFO_Send_Msg.cpp
+FIFO_Send_Msg.h
+FIFO_Send_Msg.i
+FILE_Addr.cpp
+FILE_Addr.h
+FILE_Addr.i
+FILE.cpp
+FILE.h
+FILE.i
+FILE_Connector.cpp
+FILE_Connector.h
+FILE_Connector.i
+FILE_IO.cpp
+FILE_IO.h
+FILE_IO.i
+INET_Addr.cpp
+INET_Addr.h
+INET_Addr.i
+IO_SAP.cpp
+IO_SAP.h
+IO_SAP.i
+IOStream.cpp
+IOStream.h
+IOStream_T.cpp
+IOStream_T.h
+IOStream_T.i
+Pipe.cpp
+Pipe.h
+Pipe.i
+Signal.cpp
+Signal.h
+Signal.i
+
+SPIPE_Addr.cpp
+SPIPE_Addr.h
+SPIPE_Addr.i
+SPIPE.cpp
+SPIPE.h
+SPIPE.i
+SPIPE_Acceptor.cpp
+SPIPE_Acceptor.h
+SPIPE_Acceptor.i
+SPIPE_Connector.cpp
+SPIPE_Connector.h
+SPIPE_Connector.i
+SPIPE_Stream.cpp
+SPIPE_Stream.h
+SPIPE_Stream.i
+SV_Message.cpp
+SV_Message.h
+SV_Message.i
+SV_Message_Queue.cpp
+SV_Message_Queue.h
+SV_Message_Queue.i
+SV_Semaphore_Complex.cpp
+SV_Semaphore_Complex.h
+SV_Semaphore_Complex.i
+SV_Semaphore_Simple.cpp
+SV_Semaphore_Simple.h
+SV_Semaphore_Simple.i
+SV_Shared_Memory.cpp
+SV_Shared_Memory.h
+SV_Shared_Memory.i
+TLI.cpp
+TLI.h
+TLI.i
+TLI_Acceptor.cpp
+TLI_Acceptor.h
+TLI_Acceptor.i
+TLI_Connector.cpp
+TLI_Connector.h
+TLI_Connector.i
+TLI_Stream.cpp
+TLI_Stream.h
+TLI_Stream.i
+TTY_IO.cpp
+TTY_IO.h
+Typed_SV_Message.cpp
+Typed_SV_Message.h
+Typed_SV_Message.i
+Typed_SV_Message_Queue.cpp
+Typed_SV_Message_Queue.h
+Typed_SV_Message_Queue.i
+UNIX_Addr.cpp
+UNIX_Addr.h
+UNIX_Addr.i
+UPIPE_Addr.h
+UPIPE_Acceptor.cpp
+UPIPE_Acceptor.h
+UPIPE_Acceptor.i
+UPIPE_Connector.cpp
+UPIPE_Connector.h
+UPIPE_Connector.i
+UPIPE_Stream.cpp
+UPIPE_Stream.h
+UPIPE_Stream.i
+</PRE></CODE>
+
+<H4>libACE_Svcconf</H4>
+
+This library contains the ACE C++ wrappers for the Service
+Configurator component.
+
+<PRE><CODE>
+Parse_Node.cpp
+Parse_Node.h
+Parse_Node.i
+Service_Config.cpp
+Service_Config.h
+Service_Config.i
+Service_Main.cpp
+Service_Manager.cpp
+Service_Manager.h
+Service_Manager.i
+Service_Object.cpp
+Service_Object.h
+Service_Object.i
+Service_Record.cpp
+Service_Record.h
+Service_Record.i
+Service_Repository.cpp
+Service_Repository.h
+Service_Repository.i
+Service_Types.cpp
+Service_Types.i
+Service_Types.h
+Shared_Object.cpp
+Shared_Object.h
+Shared_Object.i
+Svc_Conf.h
+Svc_Conf_l.cpp
+Svc_Conf_y.cpp
+Svc_Conf_Tokens.h
+</PRE></CODE>
+
+<H4>libACE_Streams</H4>
+
+This library contains the ACE Streams classes.
+
+<PRE><CODE>
+IO_Cntl_Msg.cpp
+IO_Cntl_Msg.h
+IO_Cntl_Msg.i
+Message_Block.cpp
+Message_Block.h
+Message_Block.i
+Message_Queue.cpp
+Message_Queue.h
+Message_Queue.i
+Message_Queue_T.cpp
+Message_Queue_T.h
+Message_Queue_T.i
+Module.cpp
+Module.h
+Module.i
+Multiplexor.cpp
+Multiplexor.h
+Multiplexor.i
+Stream.cpp
+Stream.h
+Stream.i
+Stream_Modules.cpp
+Stream_Modules.h
+Stream_Modules.i
+Task.cpp
+Task.h
+Task.i
+Task_T.cpp
+Task_T.h
+Task_T.i
+</PRE></CODE>
+
+<H4>libACE_Memory</H4>
+
+This library contains the ACE C++ wrappers for shared memory and
+memory-mapped files.
+
+<PRE><CODE>
+Malloc.cpp
+Malloc.h
+Malloc.i
+Malloc_T.cpp
+Malloc_T.h
+Malloc_T.i
+Mem_Map.cpp
+Mem_Map.h
+Mem_Map.i
+Memory_Pool.cpp
+Memory_Pool.h
+Memory_Pool.i
+Obstack.cpp
+Obstack.h
+Read_Buffer.cpp
+Read_Buffer.h
+Read_Buffer.i
+Shared_Memory.h
+Shared_Memory_MM.cpp
+Shared_Memory_MM.h
+Shared_Memory_MM.i
+Shared_Memory_SV.cpp
+Shared_Memory_SV.h
+Shared_Memory_SV.i
+</PRE></CODE>
+
+<HR><P>
+Back to the <A HREF="ACE.html">ACE</A> home page.
+
+<!--#include virtual="/~schmidt/cgi-sig.html" -->
+</BODY>
+</HTML>
diff --git a/etc/DOC-way.html b/etc/DOC-way.html
new file mode 100644
index 00000000000..da5ba6a541a
--- /dev/null
+++ b/etc/DOC-way.html
@@ -0,0 +1,53 @@
+<HTML>
+
+<HEAD>
+<TITLE>The Way of DOC</TITLE>
+</HEAD>
+
+<BODY text = "#ffffff"
+link="#80ffff"
+vlink="#ffde00"
+bgcolor="#000055">
+
+<HR>
+<H3>The Way of DOC</H3>
+
+To build an effective systems research group, it's essential to
+develop a culture that is supportive to software development and
+software system researchers and developers. The following are some of
+the key precepts that underly the culture of the <A
+HREF="http://www.cs.wustl.edu/~schmidt/ACE-members.html">DOC</A>
+research group:
+
+<UL>
+<LI> Work hard
+<LI> Have fun
+<LI> Be creative
+<LI> Learn new skills
+<LI> Teach your skills to others
+<LI> Value the contributions of team members
+<LI> Write papers
+<LI> Read papers
+<LI> Give presentations
+<LI> Respond to ACE users questions
+<LI> Delegate responsibility
+<LI> Accept responsibility
+<LI> Play chess
+<LI> Play chess after being awake all night
+<LI> Make paper airplanes
+<li> Drink Nestea
+<li> Watch South Park
+<li> Juggle and bounce balls
+<LI> Swear under your breath at C++
+<LI> Fix at least two bugs every day
+<LI> Create at least one bug every day (and then fix it ;-))
+<LI> Fix your own bugs
+<LI> Swear at other people's bugs.... but also fix them
+<LI> Move one step closer to world domination every day
+</UL>
+
+</BODY>
+</HTML>
+
+
+