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