chiark / gitweb /
Expunge revision histories in files.
[mLib] / traceopt.c
index 08cdd578d9756e187606d9bd67091217aa1aefeb..776c70817b4a2234487789f23d3dd86679a551d7 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: traceopt.c,v 1.1 1999/10/22 22:40:08 mdw Exp $
+ * $Id: traceopt.c,v 1.3 2004/04/08 01:36:13 mdw Exp $
  *
  * Parsing tracing options
  *
  * MA 02111-1307, USA.
  */
 
-/*----- Revision history --------------------------------------------------* 
- *
- * $Log: traceopt.c,v $
- * Revision 1.1  1999/10/22 22:40:08  mdw
- * Separate function for parsing user trace specs.
- *
- */
-
 /*----- Header files ------------------------------------------------------*/
 
 #include <stdio.h>
@@ -48,7 +40,7 @@
 
 /* --- @traceopt@ --- *
  *
- * Arguments:  @trace_opt *t@ = pointer to trace options table
+ * 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
  *             `?' character, a help message is displayed.
  */
 
-unsigned traceopt(trace_opt *t, const char *p, unsigned f, unsigned bad)
+unsigned traceopt(const trace_opt *t, const char *p,
+                 unsigned f, unsigned bad)
 {
   unsigned sense = 1;
 
   /* --- Dump out help text --- */
 
-  if (!p || strcmp(p, "?")) {
+  if (!p || !strcmp(p, "?")) {
+    const trace_opt *tt;
     puts("Trace options:");
-    while (t->ch) {
-      if (t->f & bad || !t->help)
+    for (tt = t; tt->ch; tt++) {
+      if (!(tt->f & ~bad) || !tt->help)
        continue;
-      printf("  `%c': %s\n", t->ch, t->help);
+      printf("  `%c': %s\n", tt->ch, tt->help);
     }
     return (f);
   }
@@ -88,17 +82,17 @@ unsigned traceopt(trace_opt *t, const char *p, unsigned f, unsigned bad)
        sense = 0;
        break;
       default: {
-       trace_opt *tt;
+       const trace_opt *tt;
        for (tt = t; tt->ch; tt++) {
-         if (tt->f & bad)
+         if (!(tt->f & ~bad))
            continue;
          if (tt->ch == *p) {
            if (sense)
              f |= (tt->f & ~bad);
            else
              f &= ~(tt->f & ~bad);
+           goto ok;
          }
-         goto ok;
        }
        moan("unknown trace option `%c'", *p);
       ok:;