chiark / gitweb /
Add global unihash table; use universal hashing instead of CRC.
[mLib] / trace.h
diff --git a/trace.h b/trace.h
index 36b555a..c78ba8f 100644 (file)
--- a/trace.h
+++ b/trace.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: trace.h,v 1.2 1999/05/05 18:50:31 mdw Exp $
+ * $Id: trace.h,v 1.6 2001/02/03 16:23:55 mdw Exp $
  *
  * Tracing functions for debugging
  *
  * GNU Library General Public License for more details.
  * 
  * You should have received a copy of the GNU Library General Public
- * License along with mLib; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * License along with mLib; if not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
  */
 
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: trace.h,v $
+ * Revision 1.6  2001/02/03 16:23:55  mdw
+ * New custom trace output interface.
+ *
+ * Revision 1.5  1999/12/10 23:42:04  mdw
+ * Change header file guard names.
+ *
+ * Revision 1.4  1999/10/22 22:39:52  mdw
+ * New documented interface for tracing.
+ *
+ * Revision 1.3  1999/05/06 19:51:35  mdw
+ * Reformatted the LGPL notice a little bit.
+ *
  * Revision 1.2  1999/05/05 18:50:31  mdw
  * Change licensing conditions to LGPL.
  *
  *
  */
 
-#ifndef TRACE_H
-#define TRACE_H
+#ifndef MLIB_TRACE_H
+#define MLIB_TRACE_H
 
 #ifdef __cplusplus
   extern "C" {
 #endif
 
+/*----- Header files ------------------------------------------------------*/
+
 #include <stdio.h>
 
+/*----- Data structures ---------------------------------------------------*/
+
+typedef struct trace_opt {
+  char ch;
+  unsigned f;
+  const char *help;
+} trace_opt;
+
 /*----- Functions provided ------------------------------------------------*/
 
 /* --- @trace@ --- *
  *
- * Arguments:  @unsigned int l@ = trace level for output
+ * Arguments:  @unsigned l@ = trace level for output
  *             @const char *f@ = a @printf@-style format string
  *             @...@ = other arguments
  *
  * Use:                Reports a message to the trace output.
  */
 
-extern void trace(unsigned int /*l*/, const char */*f*/, ...);
+extern void trace(unsigned /*l*/, const char */*f*/, ...);
 
 /* --- @trace_block@ --- *
  *
- * Arguments:  @unsigned int l@ = trace level for output
+ * Arguments:  @unsigned l@ = trace level for output
  *             @const char *s@ = some header string to write
  *             @const void *b@ = pointer to a block of memory to dump
  *             @size_t sz@ = size of the block of memory
@@ -73,31 +96,46 @@ extern void trace(unsigned int /*l*/, const char */*f*/, ...);
  * Use:                Dumps the contents of a block to the trace output.
  */
 
-extern void trace_block(unsigned int /*l*/, const char */*s*/,
+extern void trace_block(unsigned /*l*/, const char */*s*/,
                        const void */*b*/, size_t /*sz*/);
 
 /* --- @trace_on@ --- *
  *
  * Arguments:  @FILE *fp@ = a file to trace on
- *             @unsigned int l@ = trace level to set
+ *             @unsigned l@ = trace level to set
  *
  * Returns:    ---
  *
  * Use:                Enables tracing to a file.
  */
 
-extern void trace_on(FILE */*fp*/, unsigned int /*l*/);
+extern void trace_on(FILE */*fp*/, unsigned /*l*/);
+
+/* --- @trace_custom@ --- *
+ *
+ * Arguments:  @void (*func)(const char *buf, size_t sz, void *v)@ =
+ *                     output function
+ *             @void *v@ = magic handle to give to function
+ *
+ * Returns:    ---
+ *
+ * Use:                Sets up a custom trace handler.
+ */
+
+extern void trace_custom(void (*/*func*/)(const char */*buf*/,
+                                         size_t /*sz*/, void */*v*/),
+                        void */*v*/);
 
-/* --- @trace_setLevel@ --- *
+/* --- @trace_level@ --- *
  *
- * Arguments:  @unsigned int l@ = trace level to set
+ * Arguments:  @unsigned l@ = trace level to set
  *
  * Returns:    ---
  *
  * Use:                Sets the tracing level.
  */
 
-extern void trace_setLevel(unsigned int /*l*/);
+extern void trace_level(unsigned /*l*/);
 
 /* --- @tracing@ --- *
  *
@@ -108,7 +146,24 @@ extern void trace_setLevel(unsigned int /*l*/);
  * Use:                Informs the caller whether tracing is enabled.
  */
 
-extern unsigned int tracing(void);
+extern unsigned tracing(void);
+
+/* --- @traceopt@ --- *
+ *
+ * Arguments:  @const trace_opt *t@ = pointer to trace options table
+ *             @const char *p@ = option string supplied by user
+ *             @unsigned f@ = initial tracing flags
+ *             @unsigned bad@ = forbidden tracing flags
+ *
+ * Returns:    Trace flags as set by user.
+ *
+ * Use:                Parses an option string from the user and sets the
+ *             appropriate trace flags.  If the argument is null or a single
+ *             `?' character, a help message is displayed.
+ */
+
+extern unsigned traceopt(const trace_opt */*t*/, const char */*p*/,
+                        unsigned /*f*/, unsigned /*bad*/);
 
 /*----- Tracing macros ----------------------------------------------------*/