11193SN/A/*-
29330SN/A * Copyright (c) 2004 Michael Bushkov <bushman@rsu.ru>
31193SN/A * All rights reserved.
41193SN/A *
51193SN/A * Redistribution and use in source and binary forms, with or without
61193SN/A * modification, are permitted provided that the following conditions
72362SN/A * are met:
81193SN/A * 1. Redistributions of source code must retain the above copyright
92362SN/A *    notice, this list of conditions and the following disclaimer.
101193SN/A * 2. Redistributions in binary form must reproduce the above copyright
111193SN/A *    notice, this list of conditions and the following disclaimer in the
121193SN/A *    documentation and/or other materials provided with the distribution.
131193SN/A *
141193SN/A * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
151193SN/A * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
161193SN/A * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
171193SN/A * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
181193SN/A * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
191193SN/A * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
201193SN/A * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
212362SN/A * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
222362SN/A * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
232362SN/A * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
241193SN/A * SUCH DAMAGE.
251193SN/A *
263793SN/A */
271193SN/A
283793SN/A#include <sys/cdefs.h>
293793SN/A__FBSDID("$FreeBSD$");
303793SN/A
313793SN/A#include <stdio.h>
3215328Sredestad
331193SN/A#include "debug.h"
341193SN/A
354183SN/Astatic	int	trace_level = 0;
363792SN/Astatic	int	trace_level_bk = 0;
371193SN/A
3815328Sredestadvoid
3915328Sredestadnscd_trace_in(const char *s, const char *f, int l)
4010626Svlivanov{
4115328Sredestad	int i;
4215328Sredestad	if (trace_level < TRACE_WANTED)
4310626Svlivanov	{
4415328Sredestad		for (i = 0; i < trace_level; ++i)
4515328Sredestad			printf("\t");
4610626Svlivanov
4710626Svlivanov		printf("=> %s\n", s);
4815328Sredestad	}
4910626Svlivanov
5010626Svlivanov	++trace_level;
5115328Sredestad}
5215328Sredestad
5315328Sredestadvoid
5415328Sredestadnscd_trace_point(const char *f, int l)
5515328Sredestad{
5615328Sredestad	int i;
5715328Sredestad
5810626Svlivanov	if (trace_level < TRACE_WANTED)
5910626Svlivanov	{
6010626Svlivanov		for (i = 0; i < trace_level - 1; ++i)
6110626Svlivanov			printf("\t");
6210626Svlivanov
631193SN/A		printf("= %s: %d\n", f, l);
6410626Svlivanov	}
651193SN/A}
661193SN/A
671193SN/Avoid
681193SN/Anscd_trace_msg(const char *msg, const char *f, int l)
691193SN/A{
704183SN/A	int i;
714183SN/A
724183SN/A	if (trace_level < TRACE_WANTED)
734183SN/A	{
744183SN/A		for (i = 0; i < trace_level - 1; ++i)
7510626Svlivanov			printf("\t");
7610626Svlivanov
7710626Svlivanov		printf("= MSG %s, %s: %d\n", msg, f, l);
784183SN/A	}
794183SN/A}
8010626Svlivanov
814183SN/Avoid
821193SN/Anscd_trace_ptr(const char *desc, const void *p, const char *f, int l)
831193SN/A{
8410626Svlivanov	int i;
8510626Svlivanov
8610626Svlivanov	if (trace_level < TRACE_WANTED)
874183SN/A	{
884183SN/A		for (i = 0; i < trace_level - 1; ++i)
8910626Svlivanov			printf("\t");
904183SN/A
911193SN/A		printf("= PTR %s: %p, %s: %d\n", desc, p, f, l);
921193SN/A	}
9310626Svlivanov}
9410626Svlivanov
9510626Svlivanovvoid
964183SN/Anscd_trace_int(const char *desc, int i, const char *f, int l)
974183SN/A{
9810626Svlivanov	int j;
994183SN/A
1001193SN/A	if (trace_level < TRACE_WANTED)
1011193SN/A	{
10210626Svlivanov		for (j = 0; j < trace_level - 1; ++j)
10310626Svlivanov			printf("\t");
10410626Svlivanov
1054183SN/A		printf("= INT %s: %i, %s: %d\n",desc, i, f, l);
1064183SN/A	}
10710626Svlivanov}
1084183SN/A
1091193SN/Avoid
1101193SN/Anscd_trace_str(const char *desc, const char *s, const char *f, int l)
11110626Svlivanov{
11210626Svlivanov	int i;
11310626Svlivanov
1144183SN/A	if (trace_level < TRACE_WANTED)
1154183SN/A	{
11610626Svlivanov		for (i = 0; i < trace_level - 1; ++i)
1174183SN/A			printf("\t");
1181193SN/A
1191193SN/A		printf("= STR %s: '%s', %s: %d\n", desc, s, f, l);
12010626Svlivanov	}
12110626Svlivanov}
12210626Svlivanov
1234183SN/Avoid
1244183SN/Anscd_trace_out(const char *s, const char *f, int l)
12510626Svlivanov{
1264183SN/A	int i;
1271193SN/A
1281193SN/A	--trace_level;
12910626Svlivanov	if (trace_level < TRACE_WANTED)
13010626Svlivanov	{
13110626Svlivanov		for (i = 0; i < trace_level; ++i)
1324183SN/A			printf("\t");
1334183SN/A
13410626Svlivanov		printf("<= %s\n", s);
1354183SN/A	}
1361193SN/A}
1371193SN/A
13810626Svlivanovvoid
13910626Svlivanovnscd_trace_on(void)
14010626Svlivanov{
1414183SN/A	trace_level = trace_level_bk;
1424183SN/A	trace_level_bk = 0;
14310626Svlivanov}
1444183SN/A
1451193SN/Avoid
1461193SN/Anscd_trace_off(void)
14710626Svlivanov{
14810626Svlivanov	trace_level_bk = trace_level;
14910626Svlivanov	trace_level = 1024;
1505688SN/A}
1511193SN/A