added Id tag
[libfirm] / ir / adt / debug.c
1 /* Debug --- run time debug level management
2    Copyright (C) 1995, 1996 Christian von Roques
3    All rights reserved. */
4
5 /* $Id$ */
6
7 #ifdef HAVE_CONFIG_H
8 # include <config.h>
9 #endif
10
11 #include <stdlib.h>
12 #include <string.h>
13 #include "debug.h"
14 #include "misc.h"
15
16
17 int
18 (d_) (int flag, unsigned level)
19 {
20   return d_ (flag, level);
21 }
22
23
24 int
25 (d_level) (int flag)
26 {
27   return d_level (flag);
28 }
29
30
31 int
32 (d_set_level) (int flag, unsigned level)
33 {
34   return d_set_level (flag, level);
35 }
36
37
38 #ifdef DEBUG
39 int nflags;
40 unsigned char *d_vec;
41 #endif
42
43
44 /*
45  * Set debug flags according to the following syntax:
46  * number ["-" number] ["." number]
47  * 1st number is number of first flag to set.
48  * 2nd number is number of last flag to set. [defaults to 1st number]
49  * 3rd number is level to set the flags to. [defaults to 1]
50  */
51 void
52 (d_parse) (const char *s)
53 {
54 #ifdef DEBUG
55   long first, last, level;
56   char *end;
57
58   first = strtol(s, &end, 10);
59   last = (s != end) ? first : nflags-1;
60
61   s = end;
62   if (*s == '-') {
63     ++s;
64     last = strtol(s, &end, 10);
65     if (end == s) last = nflags-1; /* 3-  ==> 3..nflags-1 */
66   }
67
68   s = end;
69   if (*s == '.') {
70     ++s;
71     level = strtol(s, &end, 10);
72     /* . with no number gives level 0 */
73   } else {
74     level = 1;
75   }
76
77   if (first<0) first=0;
78   if (last>=nflags) last = nflags-1;
79
80   while (first<=last) d_vec[first++] = level;
81 #endif /* DEBUG */
82 }
83
84
85 void
86 (d_init) (int n)
87 {
88 #ifdef DEBUG
89   nflags = n;
90   d_vec = xmalloc (sizeof (unsigned char) * n);
91   memset(d_vec, 0, sizeof (unsigned char) * n);
92 #endif
93 }