Moved here from ../debug/
authorGötz Lindenmaier <goetz@ipd.info.uni-karlsruhe.de>
Thu, 1 Mar 2001 10:58:25 +0000 (10:58 +0000)
committerGötz Lindenmaier <goetz@ipd.info.uni-karlsruhe.de>
Thu, 1 Mar 2001 10:58:25 +0000 (10:58 +0000)
[r96]

ir/adt/Makefile
ir/adt/debug.c [new file with mode: 0644]
ir/adt/debug.h [new file with mode: 0644]

index 80a7600..f9a857d 100644 (file)
@@ -20,7 +20,7 @@ X_INCLUDES  =
 SHELL       = /bin/sh
 MAKE        = /usr/bin/make
 
-MEMBERS         = array.m pdeq.m set.m
+MEMBERS         = array.m pdeq.m set.m debug.m
 
 CFILES = $(MEMBERS:.m=.c)
 CFIMES +=  xmalloc.c
diff --git a/ir/adt/debug.c b/ir/adt/debug.c
new file mode 100644 (file)
index 0000000..00740db
--- /dev/null
@@ -0,0 +1,91 @@
+/* Debug --- run time debug level management
+   Copyright (C) 1995, 1996 Christian von Roques
+   All rights reserved. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include "debug.h"
+#include "misc.h"
+
+
+int
+(d_) (int flag, unsigned level)
+{
+  return d_ (flag, level);
+}
+
+
+int
+(d_level) (int flag)
+{
+  return d_level (flag);
+}
+
+
+int
+(d_set_level) (int flag, unsigned level)
+{
+  return d_set_level (flag, level);
+}
+
+
+#ifdef DEBUG
+int nflags;
+unsigned char *d_vec;
+#endif
+
+
+/*
+ * Set debug flags according to the following syntax:
+ * number ["-" number] ["." number]
+ * 1st number is number of first flag to set.
+ * 2nd number is number of last flag to set. [defaults to 1st number]
+ * 3rd number is level to set the flags to. [defaults to 1]
+ */
+void
+(d_parse) (const char *s)
+{
+#ifdef DEBUG
+  long first, last, level;
+  char *end;
+
+  first = strtol(s, &end, 10);
+  last = (s != end) ? first : nflags-1;
+
+  s = end;
+  if (*s == '-') {
+    ++s;
+    last = strtol(s, &end, 10);
+    if (end == s) last = nflags-1; /* 3-  ==> 3..nflags-1 */
+  }
+
+  s = end;
+  if (*s == '.') {
+    ++s;
+    level = strtol(s, &end, 10);
+    /* . with no number gives level 0 */
+  } else {
+    level = 1;
+  }
+
+  if (first<0) first=0;
+  if (last>=nflags) last = nflags-1;
+
+  while (first<=last) d_vec[first++] = level;
+#endif /* DEBUG */
+}
+
+
+void
+(d_init) (int n)
+{
+#ifdef DEBUG
+  nflags = n;
+  d_vec = xmalloc (sizeof (unsigned char) * n);
+  memset(d_vec, 0, sizeof (unsigned char) * n);
+#endif
+}
diff --git a/ir/adt/debug.h b/ir/adt/debug.h
new file mode 100644 (file)
index 0000000..cb49dd3
--- /dev/null
@@ -0,0 +1,36 @@
+/* Declarations for debug
+   Copyright (C) 1995, 1996 Christian von Roques
+   All rights reserved.  */
+
+#ifndef _DEBUG_H_
+#define _DEBUG_H_
+
+void d_init (int nflags);
+int  d_ (int flag, unsigned level);
+int  d_level (int flag);
+int  d_set_level (int flag, unsigned level);
+void d_parse (const char *s);
+
+#ifdef DEBUG
+
+#include "deflag.h"
+
+extern unsigned char *d_vec;
+
+# define d_init(n) (d_init) ((n))
+# define d_(flag, level) (d_vec[(flag)] >= (level))
+# define d_level(flag) (d_vec[(flag)])
+# define d_set_level(flag, level) (d_vec[(flag)] = (level))
+# define d_parse(s) (d_parse) ((s))
+
+#else  /* !DEBUG */
+
+# define d_init(n) ((void)0)
+# define d_(flag, level) 0
+# define d_level(flag) 0
+# define d_set_level(flag, level) (level)
+# define d_parse(s) ((void)0)
+
+#endif /* !DEBUG */
+
+#endif