fcdbg.c revision ca08ab68
12c393a42Smrg/*
2a6844aabSmrg * fontconfig/src/fcdbg.c
32c393a42Smrg *
42c393a42Smrg * Copyright © 2000 Keith Packard
52c393a42Smrg *
62c393a42Smrg * Permission to use, copy, modify, distribute, and sell this software and its
72c393a42Smrg * documentation for any purpose is hereby granted without fee, provided that
82c393a42Smrg * the above copyright notice appear in all copies and that both that
92c393a42Smrg * copyright notice and this permission notice appear in supporting
10ca08ab68Smrg * documentation, and that the name of the author(s) not be used in
112c393a42Smrg * advertising or publicity pertaining to distribution of the software without
12ca08ab68Smrg * specific, written prior permission.  The authors make no
132c393a42Smrg * representations about the suitability of this software for any purpose.  It
142c393a42Smrg * is provided "as is" without express or implied warranty.
152c393a42Smrg *
16a6844aabSmrg * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
172c393a42Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
18a6844aabSmrg * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
192c393a42Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
202c393a42Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
212c393a42Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
222c393a42Smrg * PERFORMANCE OF THIS SOFTWARE.
232c393a42Smrg */
242c393a42Smrg
252c393a42Smrg#include "fcint.h"
262c393a42Smrg#include <stdio.h>
272c393a42Smrg#include <stdlib.h>
282c393a42Smrg
29ca08ab68Smrgstatic void
30ca08ab68Smrg_FcValuePrint (const FcValue v)
312c393a42Smrg{
322c393a42Smrg    switch (v.type) {
332c393a42Smrg    case FcTypeVoid:
34ca08ab68Smrg	printf ("<void>");
352c393a42Smrg	break;
362c393a42Smrg    case FcTypeInteger:
37ca08ab68Smrg	printf ("%d(i)", v.u.i);
382c393a42Smrg	break;
392c393a42Smrg    case FcTypeDouble:
40ca08ab68Smrg	printf ("%g(f)", v.u.d);
412c393a42Smrg	break;
422c393a42Smrg    case FcTypeString:
43ca08ab68Smrg	printf ("\"%s\"", v.u.s);
442c393a42Smrg	break;
452c393a42Smrg    case FcTypeBool:
46ca08ab68Smrg	printf ("%s", v.u.b ? "FcTrue" : "FcFalse");
472c393a42Smrg	break;
482c393a42Smrg    case FcTypeMatrix:
49ca08ab68Smrg	printf ("(%f %f; %f %f)", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
502c393a42Smrg	break;
512c393a42Smrg    case FcTypeCharSet:	/* XXX */
522c393a42Smrg	FcCharSetPrint (v.u.c);
532c393a42Smrg	break;
542c393a42Smrg    case FcTypeLangSet:
552c393a42Smrg	FcLangSetPrint (v.u.l);
562c393a42Smrg	break;
572c393a42Smrg    case FcTypeFTFace:
58ca08ab68Smrg	printf ("face");
592c393a42Smrg	break;
602c393a42Smrg    }
612c393a42Smrg}
622c393a42Smrg
63ca08ab68Smrgvoid
64ca08ab68SmrgFcValuePrint (const FcValue v)
65ca08ab68Smrg{
66ca08ab68Smrg    printf (" ");
67ca08ab68Smrg    _FcValuePrint (v);
68ca08ab68Smrg}
69ca08ab68Smrg
70ca08ab68Smrgvoid
71ca08ab68SmrgFcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark)
72ca08ab68Smrg{
73ca08ab68Smrg    if (show_pos_mark)
74ca08ab68Smrg	printf (" [insert here] ");
75ca08ab68Smrg    else
76ca08ab68Smrg	printf (" ");
77ca08ab68Smrg    _FcValuePrint (v);
78ca08ab68Smrg}
79ca08ab68Smrg
80ca08ab68Smrgstatic void
81ca08ab68SmrgFcValueBindingPrint (const FcValueListPtr l)
82ca08ab68Smrg{
83ca08ab68Smrg    switch (l->binding) {
84ca08ab68Smrg    case FcValueBindingWeak:
85ca08ab68Smrg	printf ("(w)");
86ca08ab68Smrg	break;
87ca08ab68Smrg    case FcValueBindingStrong:
88ca08ab68Smrg	printf ("(s)");
89ca08ab68Smrg	break;
90ca08ab68Smrg    case FcValueBindingSame:
91ca08ab68Smrg	printf ("(=)");
92ca08ab68Smrg	break;
93ca08ab68Smrg    }
94ca08ab68Smrg}
95ca08ab68Smrg
96ca08ab68Smrgvoid
97ca08ab68SmrgFcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos)
98ca08ab68Smrg{
99ca08ab68Smrg    for (; l != NULL; l = FcValueListNext(l))
100ca08ab68Smrg    {
101ca08ab68Smrg	FcValuePrintWithPosition (FcValueCanonicalize (&l->value), pos != NULL && l == pos);
102ca08ab68Smrg	FcValueBindingPrint (l);
103ca08ab68Smrg    }
104ca08ab68Smrg    if (!pos)
105ca08ab68Smrg	printf (" [insert here]");
106ca08ab68Smrg}
107ca08ab68Smrg
1082c393a42Smrgvoid
1092c393a42SmrgFcValueListPrint (FcValueListPtr l)
1102c393a42Smrg{
1112c393a42Smrg    for (; l != NULL; l = FcValueListNext(l))
1122c393a42Smrg    {
113ca08ab68Smrg	FcValuePrint (FcValueCanonicalize (&l->value));
114ca08ab68Smrg	FcValueBindingPrint (l);
1152c393a42Smrg    }
1162c393a42Smrg}
1172c393a42Smrg
1182c393a42Smrgvoid
1192c393a42SmrgFcLangSetPrint (const FcLangSet *ls)
1202c393a42Smrg{
1212c393a42Smrg    FcStrBuf	buf;
1222c393a42Smrg    FcChar8	init_buf[1024];
123ca08ab68Smrg
1242c393a42Smrg    FcStrBufInit (&buf, init_buf, sizeof (init_buf));
1252c393a42Smrg    if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf,'\0'))
1262c393a42Smrg       printf ("%s", buf.buf);
1272c393a42Smrg    else
1282c393a42Smrg       printf ("langset (alloc error)");
1292c393a42Smrg    FcStrBufDestroy (&buf);
1302c393a42Smrg}
1312c393a42Smrg
1322c393a42Smrgvoid
1332c393a42SmrgFcCharSetPrint (const FcCharSet *c)
1342c393a42Smrg{
1352c393a42Smrg    int	i, j;
1362c393a42Smrg    intptr_t	*leaves = FcCharSetLeaves (c);
1372c393a42Smrg    FcChar16	*numbers = FcCharSetNumbers (c);
138ca08ab68Smrg
1392c393a42Smrg#if 0
1402c393a42Smrg    printf ("CharSet  0x%x\n", (intptr_t) c);
1412c393a42Smrg    printf ("Leaves:  +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves);
1422c393a42Smrg    printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers);
143ca08ab68Smrg
1442c393a42Smrg    for (i = 0; i < c->num; i++)
1452c393a42Smrg    {
146ca08ab68Smrg	printf ("Page %d: %04x +%d = 0x%x\n",
147ca08ab68Smrg		i, numbers[i], leaves[i],
1482c393a42Smrg		(intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf));
1492c393a42Smrg    }
1502c393a42Smrg#endif
1512c393a42Smrg
152a6844aabSmrg    printf ("\n");
1532c393a42Smrg    for (i = 0; i < c->num; i++)
1542c393a42Smrg    {
1552c393a42Smrg	intptr_t	leaf_offset = leaves[i];
1562c393a42Smrg	FcCharLeaf	*leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf);
1572c393a42Smrg
158a6844aabSmrg	printf ("\t");
1592c393a42Smrg	printf ("%04x:", numbers[i]);
1602c393a42Smrg	for (j = 0; j < 256/32; j++)
1612c393a42Smrg	    printf (" %08x", leaf->map[j]);
1622c393a42Smrg	printf ("\n");
1632c393a42Smrg    }
1642c393a42Smrg}
1652c393a42Smrg
1662c393a42Smrgvoid
1672c393a42SmrgFcPatternPrint (const FcPattern *p)
1682c393a42Smrg{
1692c393a42Smrg    int		    i;
1702c393a42Smrg    FcPatternElt   *e;
171ca08ab68Smrg
1722c393a42Smrg    if (!p)
1732c393a42Smrg    {
1742c393a42Smrg	printf ("Null pattern\n");
1752c393a42Smrg	return;
1762c393a42Smrg    }
1772c393a42Smrg    printf ("Pattern has %d elts (size %d)\n", p->num, p->size);
1782c393a42Smrg    for (i = 0; i < p->num; i++)
1792c393a42Smrg    {
1802c393a42Smrg	e = &FcPatternElts(p)[i];
1812c393a42Smrg	printf ("\t%s:", FcObjectName(e->object));
182a6844aabSmrg	FcValueListPrint (FcPatternEltValues(e));
1832c393a42Smrg	printf ("\n");
1842c393a42Smrg    }
1852c393a42Smrg    printf ("\n");
1862c393a42Smrg}
1872c393a42Smrg
188ca08ab68Smrg#define FcOpFlagsPrint(_o_)		\
189ca08ab68Smrg    {					\
190ca08ab68Smrg	int f = FC_OP_GET_FLAGS (_o_);	\
191ca08ab68Smrg	if (f & FcOpFlagIgnoreBlanks)	\
192ca08ab68Smrg	    printf ("(ignore blanks)");	\
193ca08ab68Smrg    }
194ca08ab68Smrg
1952c393a42Smrgvoid
196ca08ab68SmrgFcOpPrint (FcOp op_)
1972c393a42Smrg{
198ca08ab68Smrg    FcOp op = FC_OP_GET_OP (op_);
199ca08ab68Smrg
2002c393a42Smrg    switch (op) {
2012c393a42Smrg    case FcOpInteger: printf ("Integer"); break;
2022c393a42Smrg    case FcOpDouble: printf ("Double"); break;
2032c393a42Smrg    case FcOpString: printf ("String"); break;
2042c393a42Smrg    case FcOpMatrix: printf ("Matrix"); break;
205ca08ab68Smrg    case FcOpRange: printf ("Range"); break;
2062c393a42Smrg    case FcOpBool: printf ("Bool"); break;
2072c393a42Smrg    case FcOpCharSet: printf ("CharSet"); break;
208ca08ab68Smrg    case FcOpLangSet: printf ("LangSet"); break;
2092c393a42Smrg    case FcOpField: printf ("Field"); break;
2102c393a42Smrg    case FcOpConst: printf ("Const"); break;
2112c393a42Smrg    case FcOpAssign: printf ("Assign"); break;
2122c393a42Smrg    case FcOpAssignReplace: printf ("AssignReplace"); break;
2132c393a42Smrg    case FcOpPrepend: printf ("Prepend"); break;
2142c393a42Smrg    case FcOpPrependFirst: printf ("PrependFirst"); break;
2152c393a42Smrg    case FcOpAppend: printf ("Append"); break;
2162c393a42Smrg    case FcOpAppendLast: printf ("AppendLast"); break;
2172c393a42Smrg    case FcOpQuest: printf ("Quest"); break;
2182c393a42Smrg    case FcOpOr: printf ("Or"); break;
2192c393a42Smrg    case FcOpAnd: printf ("And"); break;
220ca08ab68Smrg    case FcOpEqual: printf ("Equal"); FcOpFlagsPrint (op_); break;
221ca08ab68Smrg    case FcOpNotEqual: printf ("NotEqual"); FcOpFlagsPrint (op_); break;
2222c393a42Smrg    case FcOpLess: printf ("Less"); break;
2232c393a42Smrg    case FcOpLessEqual: printf ("LessEqual"); break;
2242c393a42Smrg    case FcOpMore: printf ("More"); break;
2252c393a42Smrg    case FcOpMoreEqual: printf ("MoreEqual"); break;
2262c393a42Smrg    case FcOpContains: printf ("Contains"); break;
2272c393a42Smrg    case FcOpNotContains: printf ("NotContains"); break;
2282c393a42Smrg    case FcOpPlus: printf ("Plus"); break;
2292c393a42Smrg    case FcOpMinus: printf ("Minus"); break;
2302c393a42Smrg    case FcOpTimes: printf ("Times"); break;
2312c393a42Smrg    case FcOpDivide: printf ("Divide"); break;
2322c393a42Smrg    case FcOpNot: printf ("Not"); break;
2332c393a42Smrg    case FcOpNil: printf ("Nil"); break;
2342c393a42Smrg    case FcOpComma: printf ("Comma"); break;
2352c393a42Smrg    case FcOpFloor: printf ("Floor"); break;
2362c393a42Smrg    case FcOpCeil: printf ("Ceil"); break;
2372c393a42Smrg    case FcOpRound: printf ("Round"); break;
2382c393a42Smrg    case FcOpTrunc: printf ("Trunc"); break;
239ca08ab68Smrg    case FcOpListing: printf ("Listing"); FcOpFlagsPrint (op_); break;
2402c393a42Smrg    case FcOpInvalid: printf ("Invalid"); break;
2412c393a42Smrg    }
2422c393a42Smrg}
2432c393a42Smrg
2442c393a42Smrgvoid
2452c393a42SmrgFcExprPrint (const FcExpr *expr)
2462c393a42Smrg{
2472c393a42Smrg    if (!expr) printf ("none");
248ca08ab68Smrg    else switch (FC_OP_GET_OP (expr->op)) {
2492c393a42Smrg    case FcOpInteger: printf ("%d", expr->u.ival); break;
2502c393a42Smrg    case FcOpDouble: printf ("%g", expr->u.dval); break;
2512c393a42Smrg    case FcOpString: printf ("\"%s\"", expr->u.sval); break;
2522c393a42Smrg    case FcOpMatrix: printf ("[%g %g %g %g]",
2532c393a42Smrg			      expr->u.mval->xx,
2542c393a42Smrg			      expr->u.mval->xy,
2552c393a42Smrg			      expr->u.mval->yx,
2562c393a42Smrg			      expr->u.mval->yy); break;
257ca08ab68Smrg    case FcOpRange: break;
2582c393a42Smrg    case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break;
2592c393a42Smrg    case FcOpCharSet: printf ("charset\n"); break;
260ca08ab68Smrg    case FcOpLangSet:
261ca08ab68Smrg	printf ("langset:");
262ca08ab68Smrg	FcLangSetPrint(expr->u.lval);
263ca08ab68Smrg	printf ("\n");
264ca08ab68Smrg	break;
2652c393a42Smrg    case FcOpNil: printf ("nil\n"); break;
2662c393a42Smrg    case FcOpField: printf ("%s", FcObjectName(expr->u.object)); break;
2672c393a42Smrg    case FcOpConst: printf ("%s", expr->u.constant); break;
2682c393a42Smrg    case FcOpQuest:
2692c393a42Smrg	FcExprPrint (expr->u.tree.left);
2702c393a42Smrg	printf (" quest ");
2712c393a42Smrg	FcExprPrint (expr->u.tree.right->u.tree.left);
2722c393a42Smrg	printf (" colon ");
2732c393a42Smrg	FcExprPrint (expr->u.tree.right->u.tree.right);
2742c393a42Smrg	break;
2752c393a42Smrg    case FcOpAssign:
2762c393a42Smrg    case FcOpAssignReplace:
2772c393a42Smrg    case FcOpPrependFirst:
2782c393a42Smrg    case FcOpPrepend:
2792c393a42Smrg    case FcOpAppend:
2802c393a42Smrg    case FcOpAppendLast:
2812c393a42Smrg    case FcOpOr:
2822c393a42Smrg    case FcOpAnd:
2832c393a42Smrg    case FcOpEqual:
2842c393a42Smrg    case FcOpNotEqual:
2852c393a42Smrg    case FcOpLess:
2862c393a42Smrg    case FcOpLessEqual:
2872c393a42Smrg    case FcOpMore:
2882c393a42Smrg    case FcOpMoreEqual:
2892c393a42Smrg    case FcOpContains:
2902c393a42Smrg    case FcOpListing:
2912c393a42Smrg    case FcOpNotContains:
2922c393a42Smrg    case FcOpPlus:
2932c393a42Smrg    case FcOpMinus:
2942c393a42Smrg    case FcOpTimes:
2952c393a42Smrg    case FcOpDivide:
2962c393a42Smrg    case FcOpComma:
2972c393a42Smrg	FcExprPrint (expr->u.tree.left);
2982c393a42Smrg	printf (" ");
299ca08ab68Smrg	switch (FC_OP_GET_OP (expr->op)) {
3002c393a42Smrg	case FcOpAssign: printf ("Assign"); break;
3012c393a42Smrg	case FcOpAssignReplace: printf ("AssignReplace"); break;
3022c393a42Smrg	case FcOpPrependFirst: printf ("PrependFirst"); break;
3032c393a42Smrg	case FcOpPrepend: printf ("Prepend"); break;
3042c393a42Smrg	case FcOpAppend: printf ("Append"); break;
3052c393a42Smrg	case FcOpAppendLast: printf ("AppendLast"); break;
3062c393a42Smrg	case FcOpOr: printf ("Or"); break;
3072c393a42Smrg	case FcOpAnd: printf ("And"); break;
308ca08ab68Smrg	case FcOpEqual: printf ("Equal"); FcOpFlagsPrint (expr->op); break;
309ca08ab68Smrg	case FcOpNotEqual: printf ("NotEqual"); FcOpFlagsPrint (expr->op); break;
3102c393a42Smrg	case FcOpLess: printf ("Less"); break;
3112c393a42Smrg	case FcOpLessEqual: printf ("LessEqual"); break;
3122c393a42Smrg	case FcOpMore: printf ("More"); break;
3132c393a42Smrg	case FcOpMoreEqual: printf ("MoreEqual"); break;
3142c393a42Smrg	case FcOpContains: printf ("Contains"); break;
315ca08ab68Smrg	case FcOpListing: printf ("Listing"); FcOpFlagsPrint (expr->op); break;
3162c393a42Smrg	case FcOpNotContains: printf ("NotContains"); break;
3172c393a42Smrg	case FcOpPlus: printf ("Plus"); break;
3182c393a42Smrg	case FcOpMinus: printf ("Minus"); break;
3192c393a42Smrg	case FcOpTimes: printf ("Times"); break;
3202c393a42Smrg	case FcOpDivide: printf ("Divide"); break;
3212c393a42Smrg	case FcOpComma: printf ("Comma"); break;
3222c393a42Smrg	default: break;
3232c393a42Smrg	}
3242c393a42Smrg	printf (" ");
3252c393a42Smrg	FcExprPrint (expr->u.tree.right);
3262c393a42Smrg	break;
3272c393a42Smrg    case FcOpNot:
3282c393a42Smrg	printf ("Not ");
3292c393a42Smrg	FcExprPrint (expr->u.tree.left);
3302c393a42Smrg	break;
3312c393a42Smrg    case FcOpFloor:
3322c393a42Smrg	printf ("Floor ");
3332c393a42Smrg	FcExprPrint (expr->u.tree.left);
3342c393a42Smrg	break;
3352c393a42Smrg    case FcOpCeil:
3362c393a42Smrg	printf ("Ceil ");
3372c393a42Smrg	FcExprPrint (expr->u.tree.left);
3382c393a42Smrg	break;
3392c393a42Smrg    case FcOpRound:
3402c393a42Smrg	printf ("Round ");
3412c393a42Smrg	FcExprPrint (expr->u.tree.left);
3422c393a42Smrg	break;
3432c393a42Smrg    case FcOpTrunc:
3442c393a42Smrg	printf ("Trunc ");
3452c393a42Smrg	FcExprPrint (expr->u.tree.left);
3462c393a42Smrg	break;
3472c393a42Smrg    case FcOpInvalid: printf ("Invalid"); break;
3482c393a42Smrg    }
3492c393a42Smrg}
3502c393a42Smrg
3512c393a42Smrgvoid
3522c393a42SmrgFcTestPrint (const FcTest *test)
3532c393a42Smrg{
3542c393a42Smrg    switch (test->kind) {
3552c393a42Smrg    case FcMatchPattern:
3562c393a42Smrg	printf ("pattern ");
3572c393a42Smrg	break;
3582c393a42Smrg    case FcMatchFont:
3592c393a42Smrg	printf ("font ");
3602c393a42Smrg	break;
3612c393a42Smrg    case FcMatchScan:
3622c393a42Smrg	printf ("scan ");
3632c393a42Smrg	break;
3642c393a42Smrg    }
3652c393a42Smrg    switch (test->qual) {
3662c393a42Smrg    case FcQualAny:
3672c393a42Smrg	printf ("any ");
3682c393a42Smrg	break;
3692c393a42Smrg    case FcQualAll:
3702c393a42Smrg	printf ("all ");
3712c393a42Smrg	break;
3722c393a42Smrg    case FcQualFirst:
3732c393a42Smrg	printf ("first ");
3742c393a42Smrg	break;
3752c393a42Smrg    case FcQualNotFirst:
3762c393a42Smrg	printf ("not_first ");
3772c393a42Smrg	break;
3782c393a42Smrg    }
3792c393a42Smrg    printf ("%s ", FcObjectName (test->object));
3802c393a42Smrg    FcOpPrint (test->op);
3812c393a42Smrg    printf (" ");
3822c393a42Smrg    FcExprPrint (test->expr);
3832c393a42Smrg    printf ("\n");
3842c393a42Smrg}
3852c393a42Smrg
3862c393a42Smrgvoid
3872c393a42SmrgFcEditPrint (const FcEdit *edit)
3882c393a42Smrg{
3892c393a42Smrg    printf ("Edit %s ", FcObjectName (edit->object));
3902c393a42Smrg    FcOpPrint (edit->op);
3912c393a42Smrg    printf (" ");
3922c393a42Smrg    FcExprPrint (edit->expr);
3932c393a42Smrg}
3942c393a42Smrg
3952c393a42Smrgvoid
3962c393a42SmrgFcSubstPrint (const FcSubst *subst)
3972c393a42Smrg{
3982c393a42Smrg    FcEdit	*e;
3992c393a42Smrg    FcTest	*t;
400ca08ab68Smrg
4012c393a42Smrg    printf ("match\n");
4022c393a42Smrg    for (t = subst->test; t; t = t->next)
4032c393a42Smrg    {
4042c393a42Smrg	printf ("\t");
4052c393a42Smrg	FcTestPrint (t);
4062c393a42Smrg    }
4072c393a42Smrg    printf ("edit\n");
4082c393a42Smrg    for (e = subst->edit; e; e = e->next)
4092c393a42Smrg    {
4102c393a42Smrg	printf ("\t");
4112c393a42Smrg	FcEditPrint (e);
4122c393a42Smrg	printf (";\n");
4132c393a42Smrg    }
4142c393a42Smrg    printf ("\n");
4152c393a42Smrg}
4162c393a42Smrg
4172c393a42Smrgvoid
4182c393a42SmrgFcFontSetPrint (const FcFontSet *s)
4192c393a42Smrg{
4202c393a42Smrg    int	    i;
4212c393a42Smrg
4222c393a42Smrg    printf ("FontSet %d of %d\n", s->nfont, s->sfont);
4232c393a42Smrg    for (i = 0; i < s->nfont; i++)
4242c393a42Smrg    {
4252c393a42Smrg	printf ("Font %d ", i);
4262c393a42Smrg	FcPatternPrint (s->fonts[i]);
4272c393a42Smrg    }
4282c393a42Smrg}
4292c393a42Smrg
4302c393a42Smrgint FcDebugVal;
4312c393a42Smrg
4322c393a42Smrgvoid
4332c393a42SmrgFcInitDebug (void)
4342c393a42Smrg{
4352c393a42Smrg    char    *e;
4362c393a42Smrg
4372c393a42Smrg    e = getenv ("FC_DEBUG");
4382c393a42Smrg    if (e)
4392c393a42Smrg    {
4402c393a42Smrg        printf ("FC_DEBUG=%s\n", e);
4412c393a42Smrg        FcDebugVal = atoi (e);
4422c393a42Smrg        if (FcDebugVal < 0)
4432c393a42Smrg   	    FcDebugVal = 0;
4442c393a42Smrg    }
4452c393a42Smrg}
4462c393a42Smrg#define __fcdbg__
4472c393a42Smrg#include "fcaliastail.h"
4482c393a42Smrg#undef __fcdbg__
449